POJ 2033 - DP..考虑要完全..

    很明显的动态规划...dp[i]的状态等于dp[i-1] 或者 等于 dp[i-1]+dp[i-2] 或者等于 dp[i-2] ...

    关键的就是注意号细节...

    1 . dp [ i - 1 ] 能转移过来的条件是 s [ i ] 非0...

    2.  dp [ i - 2 ] 能转移过来的条件是 s[ i -1 ] *10 + s[ i ] 在[ 10 , 26 ] ...

    3.  若有两个连着的0..是不存在任何结果的..输出0 


#include<iostream>
#include<queue>
#include<stdio.h>
#include<math.h>
#define oo 200000000
using namespace std;  
char s[10001];
long long i,l,dp[10001],k;
int main()
{  
     freopen("input.txt","r",stdin);
     freopen("output.txt","w",stdout);
     while (gets(s+1))
     {
           if (s[1]=='0') break;
           l=strlen(s+1);
           memset(dp,0,sizeof(dp));
           dp[0]=dp[1]=1;
           for (i=2;i<=l;i++)
           {
                 if (s[i]-'0') dp[i]=dp[i-1];
                 k=s[i]-'0'+(s[i-1]-'0')*10;
                 if (k<27 && k>9) dp[i]+=dp[i-2];
                 if (!k) { dp[l]=0; break; }
           }
           printf("%I64d\n",dp[l]);
     }
     return 0;   
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值