hdu4639 hehe 递推

此题为递推题 现场比赛中由于心态问题没能快速推出来
定义f[i]为i个连续的he可以表示的语意的个数 则如果第i个he单独考虑f[i]=f[i-1];
如果将第i个he和第i-1个he组合 则其只能表示为wqnmlgb 不然肯定会和前面一种情况重复

代码如下:

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<fstream>
#include<string>
using namespace std;
#define M 10007
int f[10100];
int result;
void init()
{
    f[0]=0;
    f[1]=0;
    f[2]=2;
    f[3]=3;
    for(int i=4;i<=10086;i++)
        f[i]=(f[i-1]+f[i-2])%M;
}
int main()
{
    string s;
    int t;
    //freopen("hdu4639.txt","r",stdin);
    cin>>t;
    init();
    int k=1;
    while(t--)
    {
        int count=0;
        cin>>s;
         result=1;
        
         for(int i=0;i<s.length();)
            {
                if(s[i]=='h'&&s[i+1]=='e') {count++;i+=2;}
                else{
                    if(count>=2)
                    result=(result*f[count])%M;
                    i++;count=0;
                }
                
            }
            if(count>=2) result=(result*f[count])%M;
            cout<<"Case "<<k++<<": "<<result<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/xiaozhuyang/p/hdu4639.html