ABC303D - Shift vs. CapsLock

解法1:DP

考え方

dp[i][j] = i個目まで決めて,capslockON(j=1), OFF(j=0)のときの最小値

回答例

X, Y, Z = map(int, input().split())
S = input()

dp = [[0]*2 for _ in range(len(S) + 1)]
dp[0][1] = 1 << 60

for i in range(len(S)):
    s = S[i]
    if s == 'a':
        dp[i + 1][0] = min(dp[i][0] + X, dp[i][1] + Z + X)
        dp[i + 1][1] = min(dp[i][0] + Z + Y, dp[i][1] + Y)
    elif s == 'A':
        dp[i + 1][0] = min(dp[i][0] + Y, dp[i][1] + Z + Y)
        dp[i + 1][1] = min(dp[i][0] + Z + X, dp[i][1] + X)

print(min(dp[-1]))