题目: https://atcoder.jp/contests/abc303。
A
挨个判断。
B
暴力枚举两个人是否会 in bad mood。
C
用 map 或者 set 记录回血的位置。
D
考虑 dp。
\(f_{i,[0,1]}\) 表示当前到 \(i\),是否开了大写锁定的方案数。
转移:
if(s[i]=='A'){
f[i][0]=min(f[i-1][1]+x+z,f[i-1][0]+y);
f[i][1]=min(f[i-1][1]+x,f[i-1][0]+z+x);
f[i][0]=min(f[i][0],f[i-1][1]+z+y);
f[i][1]=min(f[i][1],f[i-1][0]+z+y);
f[i][0]=min(f[i][0],f[i-1][0]+z+x+z);
f[i][1]=min(f[i][1],f[i-1][1]+z+y+z);
}
else{
f[i][0]=min(f[i-1][1]+min(z+x,y+z),f[i-1][0]+min(x,z+y+z));
f[i][1]=min(f[i-1][0]+min(x+z,z+y),f[i-1][1]+min(y,z+x+z));
}
应该不算难推罢。
没时间了,剩下的下周写。