题目:Easy Problem
思路:
令f[i]表示把字符i全部去掉的最小代价。
转移:
f
[
i
]
=
m
i
n
(
f
[
i
−
1
]
,
f
[
i
]
+
w
[
j
]
)
f[i]=min(f[i-1],f[i]+w[j])
f[i]=min(f[i−1],f[i]+w[j])
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 100000
#define read(x) scanf("%d",&x)
#define ll long long
int n;
char s[maxn+5];
int w[maxn+5];
ll f[15];
int main() {
read(n);scanf("%s",s+1);
for(int i=1;i<=n;i++) read(w[i]);
for(int i=1;i<=n;i++) {
if(s[i]=='h') f[1]+=w[i];
else if(s[i]=='a') f[2]=min(f[1],f[2]+w[i]);
else if(s[i]=='r') f[3]=min(f[2],f[3]+w[i]);
else if(s[i]=='d') f[4]=min(f[3],f[4]+w[i]);
}
printf("%lld",f[4]);
return 0;
}