递推题: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]); } }