HDU3555[Bomb]--数位DP

来源:互联网 发布:淘宝香港发货是真的吗 编辑:程序博客网 时间:2024/06/06 11:38

【链接】
hdu3555

【解题报告】
简单的数位DP

#include<cstdio>#include<cstring>#define LL long longusing namespace std;const int maxn=25;int T,n,a[maxn];LL m,f[maxn][10];inline LL Read(){    LL res=0; char ch=getchar();    while (ch<'0'||ch>'9') ch=getchar();    while (ch>='0'&&ch<='9') res=res*10+ch-48,ch=getchar();    return res;}LL Dfs(int x,int las,bool pd){    if (x>n) return 1;    if (!pd&&f[x][las]) return f[x][las];    int MAX=9; if (pd) MAX=a[x]; f[x][las]=0;    for (int i=0; i<=MAX; i++)     if (las!=4||(las==4&&i!=9)) f[x][las]+=Dfs(x+1,i,pd&(i==a[x]));    return f[x][las];}void Work(){    a[0]=n=m=0; char ch=getchar();    while (ch<'0'||ch>'9') ch=getchar();    while (ch>='0'&&ch<='9') m=m*10+ch-48,a[++n]=ch-48,ch=getchar();    printf("%lld\n",m-Dfs(1,0,1)+1);}int main(){    T=Read();    while (T--) Work();    return 0;}
原创粉丝点击