POJ 1850 Code (数位DP)

来源:互联网 发布:动感单车品牌 知乎 编辑:程序博客网 时间:2024/06/09 16:43

题目地址:POJ 1850

简单数位DP,只需要多处理一下0的时候。

代码如下:

#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.h>using namespace std;#define LL __int64#define pi acos(-1.0)const int mod=100000000;const int INF=0x3f3f3f3f;const double eqs=1e-8;LL dp[12][30];char s[12], c[12];LL dfs(int cnt, int pre, int maxd){        if(cnt==-1) return 1&⪯        if(maxd&&pre&&dp[cnt][pre]!=-1) return dp[cnt][pre];        int i, r=maxd?26:c[cnt]-'a'+1;        LL ans=0;        if(!pre) ans+=dfs(cnt-1,0,maxd||0<r);        for(i=pre+1;i<=r;i++){                ans+=dfs(cnt-1,i,maxd||i<r);        }        if(maxd&&pre) dp[cnt][pre]=ans;        return ans;}int main(){        int len, i, flag;        memset(dp,-1,sizeof(dp));        while(scanf("%s",s)!=EOF){                len=strlen(s);                flag=0;                for(i=1;i<len;i++){                        if(s[i]<=s[i-1]){                                flag=1;                                break;                        }                }                if(flag){                        puts("0");                        continue ;                }                for(i=0;i<len;i++){                        c[i]=s[len-1-i];                }                printf("%I64d\n",dfs(len-1,0,0));        }        return 0;}


0 0
原创粉丝点击