首页 > 其他 > 详细

SPOJ Problem 394:Alphacode

时间:2015-03-05 22:13:57      阅读:215      评论:0      收藏:0      [点我收藏+]

给一组数字,按a..z为1..26排求出能组成多少种不同的字母链。

简单的DP,边界条件f[0]=1,f[1]=1,f[n]=f[n-1](如果第n个字符即s[n-1]!=48),f[n]+=f[n-2](如果第n和第n-1个字符能组成小于26的数字)

#include<cstdio>
#include<cstring>
char s[5005];
int i,j,l;
long long f[5005];
int main(){
    while(scanf("%s",s)&&s[0]!=48){
        l=strlen(s);
        memset(f,0,sizeof(f));
        f[1]=1;f[0]=1;
        for (i=2;i<=l;i++){
            if (s[i-1]!=48)f[i]=f[i-1];
            if (s[i-2]==49)f[i]+=f[i-2];
            else if (s[i-2]==50&&s[i-1]<55)f[i]+=f[i-2];
        }
        printf("%lld\n",f[l]);
    }
}

SPOJ Problem 394:Alphacode

原文:http://www.cnblogs.com/moris/p/4316740.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!