Q05
unknown
python
a year ago
933 B
2
Indexable
Never
s1 = input() s2 = input() costs = list(map(int, input().split())) # ایجاد یک ماتریس با ابعاد (len(s1)+1)×(len(s2)+1) برای ذخیره کردن هزینههای تغییر دنباله dp = [[0 for j in range(len(s2)+1)] for i in range(len(s1)+1)] # پر کردن مقادیر اولیه ماتریس for i in range(1, len(s1)+1): dp[i][0] = dp[i-1][0] + costs[ord(s1[i-1])-ord('A')] for j in range(1, len(s2)+1): dp[0][j] = dp[0][j-1] + costs[ord(s2[j-1])-ord('A')] # بهروزرسانی مقادیر ماتریس for i in range(1, len(s1)+1): for j in range(1, len(s2)+1): if s1[i-1] == s2[j-1]: dp[i][j] = dp[i-1][j-1] else: dp[i][j] = min(dp[i-1][j]+costs[ord(s1[i-1])-ord('A')], dp[i][j-1]+costs[ord(s2[j-1])-ord('A')], dp[i-1][j-1]+costs[ord(s1[i-1])-ord('A')]+costs[ord(s2[j-1])-ord('A')]) print(dp[len(s1)][len(s2)])