小欧有一个字符串,她要从字符串的开头走到字符串的结尾,初始时小欧在字符串开头。
她每次可以花费"两个位置字母 ASCII 码值之差的绝对值"的代价走到下一个位置,或花费 "2 的位置距离减一次方"的代价走到下一个与此位置字母相同的位置。
例如字符串 aba,小欧可以先花费 1 的代价从 'a' 走到 'b' 再花费 1 的代价从 'b' 走到 'a' ,也可以直接花费
求小欧从字符串开头走到结尾需要花费的最小代价。
第一行输入一个整数。
第二行输入一个长度为的仅由小写字母组成的字符串。
输出一个整数表示答案。
3 aba
2
如题目描述。
n = int(input()) chs = input() pos = 0 cost = [0] * n for i in range(1,n): lft = cost[i-1] + abs(ord(chs[i]) - ord(chs[i-1])) idx = chs[:i].rfind(chs[i]) if idx != -1: rgt = cost[idx] + 2**(i-1-idx) else: rgt = 10**6 cost[i] = min(lft, rgt) print(cost[-1])