CF集萃1
因为cf上一堆水题,每个单独开一篇博客感觉不太好,就直接放一起好了。 CF1096D Easy Problem 给定字符串,每个位置删除要代价。求最小代价使之不含子序列"hard"。 设f[i][f]表示前i个删到只匹配f位子序列的最小代价。转移看代码吧。O(n) 1 #include <bits/stdc++.h> 2 3 typedef long long LL; 4 const int N = 100010; 5 6 int a[N]; 7 LL f[N][5]; 8 char str[N]; 9 10 int main() { 11 int n; 12 scanf("%d", &n); 13 scanf("%s", str + 1); 14 for(int i = 1; i <= n; i++) scanf("%d", &a[i]); 15 16 int tag = 0; 17 for(int i = 1; i <= n; i++) { 18 if(tag == 0 && str[i] == 'h') tag++; 19 if(tag == 1 && str[i] == 'a') tag++; 20 if(tag == 2 && str[i] == 'r') tag++; 21 if(tag == 3 && str[i] == 'd') tag++; 22 } 23 if