hdu 4722 Good Numbers 数位dp(2013 ACM/ICPC Asia Regional Online —— Warmup2 1007)

来源:互联网 发布:windows防火墙关闭不了 编辑:程序博客网 时间:2024/06/06 06:07
#include <cstdio>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>using namespace std;#define LL __int64LL c[20][11];LL find(int a[],int n)//求0~a的符合条件的数{    int i,j,k;    memset(c,0,sizeof(c));    int x=0;    for(i=1;i<=n;i++)//从最高位开始,按位dp    {        for(j=0;j<10;j++)            for(k=0;k<10;k++)            c[i][(j+k)%10]+=c[i-1][j];        for(j=0;j<a[i];j++)            c[i][(x+j)%10]++;        x=(x+a[i])%10;    }    if(x==0)c[n][0]++;    return c[n][0];}int main(){    int T,tt=0;    scanf("%d",&T);    while(T--)    {        int s[20],n,i,j,num=0;        LL ans=0;        char a[20],b[20];        scanf("%s%s",a,b);        n=strlen(b);        for(i=0;i<n;i++)            s[i+1]=b[i]-'0';        ans+=find(s,n);        n=strlen(a);        for(i=0;i<n;i++)        {            s[i+1]=a[i]-'0';            num+=s[i+1];        }        ans-=find(s,n);        if(num%10==0)ans++;        printf("Case #%d: %I64d\n",++tt,ans);    }    return 0;}

原创粉丝点击