poj 2033 Alphacode

来源:互联网 发布:淘宝达人账号简介 编辑:程序博客网 时间:2024/05/16 06:09

简单DP,里面是有0的,把0区分清楚就可以A掉了,还有个需要注意的,这个数组开1000会运行错误,最好大点开。

题意:1……26表示A到Z,因为11可以有AA和K2种意思,所以要你求给你的这个译码的原文可能有多少种。

思路:还是跟上面说的一样,主要是区分这个0的存在和26这个介值。

看代码吧,我相信还算是清晰。

#include<cstdio>#include<cstring>#include<iostream>#define N 50001#define max(a1,b1) (a1)>(b1)?(a1):(b1)using namespace std;char str[N];long long dp[N],len;int main(void){    while(scanf("%s",str+1)!=EOF)    {     len = strlen(str+1);     if(len==1&&str[1]=='0')     break;     dp[0] = 1;     dp[1] = 1;     for(int i=2;i<=len;++i)     {      int x = str[i-1]-'0';      int y = str[i] - '0';      x *= 10;   x += y;      if(y==0)      {          dp[i] = dp[i-2];      }      else if(x<=10)      {          dp[i] = dp[i-1];      }      else if(x<=26)      {        dp[i] = dp[i-2]+dp[i-1];      }      else      {         dp[i] = dp[i-1];      }     }     cout<<dp[len]<<endl;    }    return 0;}


原创粉丝点击