#include<iostream>#include<algorithm>#include<cmath>#include<cstring>#include<string>#include<vector>#include<unordered_map>#include<unordered_set>#include<set>#include<map>#include<stack>#include<queue>#include<deque>#include<ctime>#include<sstream>#defineendl'\n'#defineIOSios::sync_with_stdio(false); cin.tie(0); cout.tie(0)#definelowbit(x)(x&-x)usingnamespace std;constdouble pi =acos(-1);typedeflonglong ll;typedef pair<int,int> PII;typedef pair<long,long> PLL;constint N =1e5+10, M =110;int f[N][M][2];int w[N];intmain(){int n, k;cin >> n >> k;for(int i =1; i <= n; i ++) cin >> w[i];// 注意1memset(f,-0x3f,sizeof f);for(int i =0; i <= n; i ++) f[i][0][0]=0;for(int i =1; i <= n; i ++)for(int j =0; j <= k; j ++){f[i][j][0]= f[i -1][j][0];if(j) f[i][j][0]=max(f[i][j][0], f[i -1][j -1][1]+ w[i]);// 注意2f[i][j][1]=max(f[i -1][j][1], f[i -1][j][0]- w[i]);}int res =0;for(int i =0; i <= k; i ++) res =max(res, f[n][i][0]);// 注意3 最后一天必須是空倉cout << res << endl;return0;}
#include<iostream>#include<algorithm>#include<cmath>#include<cstring>#include<string>#include<string.h>#include<vector>#include<unordered_map>#include<unordered_set>#include<set>#include<map>#include<stack>#include<queue>#include<deque>#include<ctime>#include<sstream>#defineendl'\n'#defineIOSios::sync_with_stdio(false); cin.tie(0); cout.tie(0)#definelowbit(x)(x&-x)usingnamespace std;constdouble pi =acos(-1);typedeflonglong ll;typedef pair<int,int> PII;typedef pair<long,long> PLL;constint N =55, mod =1e9+7;int n, m;char str[N];int f[N][N];int ne[N];intmain(){cin >> n >>(str +1);m =strlen(str +1);for(int i =2, j =0; i <= n; i ++){while(j && str[i]!= str[j +1]) j = ne[j];if(str[i]== str[j +1]) j ++;ne[i]= j;}f[0][0]=1;for(int i =0; i < n; i ++)// 最終串的長度for(int j =0; j < m; j ++)// kmp數組的長度for(char k ='a'; k <='z'; k ++)// 當前位置選哪個字母{int u = j;// j需要跳到哪while(u && k != str[u +1]) u = ne[u];if(k == str[u +1]) u ++;if(u < m) f[i +1][u]=(f[i +1][u]+ f[i][j])% mod;// u小于m就表示不匹配,那么是可以走的}int res =0;for(int i =0; i < m; i ++) res =(res + f[n][i])% mod;// 累加所有走不到m的狀態cout << res << endl;return0;}
#include<iostream>#include<algorithm>#include<cmath>#include<cstring>#include<string>#include<string.h>#include<vector>#include<unordered_map>#include<unordered_set>#include<set>#include<map>#include<stack>#include<queue>#include<deque>#include<ctime>#include<sstream>#defineendl'\n'#defineIOSios::sync_with_stdio(false); cin.tie(0); cout.tie(0)#definelowbit(x)(x&-x)usingnamespace std;constdouble pi =acos(-1);typedeflonglong ll;typedef pair<int,int> PII;typedef pair<long,long> PLL;constint N =1010;int n, m;int tr[N][4], dar[N], idx;int q[N], ne[N];char str[N];int f[N][N];intget(char c){if(c =='A')return0;if(c =='T')return1;if(c =='G')return2;return3;}voidinsert(){int p =0;for(int i =0; str[i]; i ++){int t =get(str[i]);if(tr[p][t]==0) tr[p][t]=++ idx;p = tr[p][t];}dar[p]=1;}voidbuild(){int hh =0, tt =-1;for(int i =0; i <4; i ++)if(tr[0][i])q[++ tt]= tr[0][i];while(hh <= tt){int t = q[hh ++];for(int i =0; i <4; i ++){int p = tr[t][i];if(!p) tr[t][i]= tr[ne[t]][i];else{ne[p]= tr[ne[t]][i];q[++ tt]= p;dar[p]|= dar[ne[p]];}}}}intmain(){int T =1;while(cin >> n, n){memset(tr,0,sizeof tr);memset(dar,0,sizeof dar);memset(ne,0,sizeof ne);idx =0;for(int i =0; i < n; i ++){cin >> str;insert();}build();cin >>(str +1);m =strlen(str +1);memset(f,0x3f,sizeof f);f[0][0]=0;for(int i =0; i < m; i ++)for(int j =0; j <= idx; j ++)for(int k =0; k <4; k ++){int t =get(str[i +1])!= k;int p = tr[j][k];if(!dar[p]) f[i +1][p]=min(f[i +1][p], f[i][j]+ t);}int res =0x3f3f3f3f;for(int i =0; i <= idx; i ++) res =min(res, f[m][i]);if(res ==0x3f3f3f3f) res =-1;printf("Case %d: %d\n", T ++, res);}}