题解 CF1096D Easy Problem
Date 2019.8.2
题目大意
给你一个长为n的字符串s以及 a1…n,删去第i个字符的代价为 ai,你需要删去一些字符(如果一开始就符合条件当然可以不删)使得剩下的串中不含子序列 “hard”,求最小代价。
思路
因为题目要求的是不含子序列"hard",而不是子串,所以我们显然不能贪心。
而对于这种跟子序列有关的问题,我们不难想到DP。
-
状态
我们定义f[i][i2]为到s的第i位为止,使得其子序列只等于"hard"的前i2位的花费。其中,i为1-n,i2为1-4。
-
转移
分为两种情况(下文中的s数组下标从1开始,而hard数组下标从0开始)
1.s[i]=hard[i2-1]
此时我们可以选择不花费,但会使匹配的位数增加一位;也可以花费a[i]的代价,保持匹配的位数不变。所以此时的转移方程为:
f[i][i2]=min(f[i−1][i2−1],f[i−1][i2]+a[i])f[i][i2]=min(f[i-1][i2-1],f[i-1][i2]+a[i])