遞推題:ios
dp[i]表示字符串第i個字母前有多少種不一樣的方法spa
一、出現一個hehe:dp[i]=dp[i-4]+dp[i-2]code
意思是dp[i]=當前的hehe換成wqnmlgb+當前的hehe不換成wqnmlgbblog
二、沒有出現hehe:dp[i]=dp[i-1]ci
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; char ac[12000]; int dp[12000]; int main() { int t,tt=1; cin>>t; while(t--) { scanf("%s",ac+1);//字符串+1有利於計算 int len=strlen(ac+1); dp[0]=dp[1]=dp[2]=dp[3]=1; //初始化,前3個字符組成的串的方法數只多是1 for(int i=4;i<=len;++i) { if(ac[i-3]=='h'&&ac[i-2]=='e'&&ac[i-1]=='h'&&ac[i]=='e') { dp[i]=dp[i-2]+dp[i-4]; dp[i]%=10007; } else dp[i]=dp[i-1]; } printf("Case %d: %d\n",tt++,dp[len]); } }