BZOJ1833 [ZJOI2010]count 数字计数

来源:互联网 发布:阿里云数据库的好处 编辑:程序博客网 时间:2024/04/30 00:55

数位DP模板题

然而我并不会-_-orz了一发hzwer学长的代码,终于学会了数位DP

设f[i][j]表示i位,开头为j的方案数(算前导零)

先预处理f数组

求a以内的答案时,先加上所有位数不足a的位数的,然后从高位到低位枚举当前位是几,计入答案,然后定下这一位,枚举下一位

基本把黄学长的代码抄了一遍-_-

复杂度O(位数*10*更新复杂度)

#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<cmath>#include<ctime>#include<algorithm>#include<iomanip>#include<vector>#include<stack>#include<queue>#include<map>#include<set>#include<bitset>using namespace std;#define MAXN 1010#define MAXM 1010#define ll long long#define INF 1000000000#define MOD 1000000007#define eps 1e-8struct data{    ll x[10];    data(){        memset(x,0,sizeof(x));    }    friend data operator +(data x,data y){        int i;        data z;        for(i=0;i<=9;i++){            z.x[i]=x.x[i]+y.x[i];        }        return z;    }    friend data operator -(data x,data y){        int i;        data z;        for(i=0;i<=9;i++){            z.x[i]=x.x[i]-y.x[i];        }        return z;    }};data f[15][10];ll mi[15];data cal(ll x){    int i,j;    data re=f[1][0];    int len=13;    if(!x){        return re;    }    while(mi[len]>x){        len--;    }    for(i=1;i<len;i++){        for(j=1;j<=9;j++){            re=re+f[i][j];        }    }    int y=x/mi[len];    for(i=1;i<y;i++){            re=re+f[len][i];    }    x%=mi[len];    re.x[y]+=x+1;    for(i=len-1;i;i--){        y=x/mi[i];        for(j=0;j<y;j++){            re=re+f[i][j];        }        x%=mi[i];        re.x[y]+=x+1;    }    return re;}int main(){    int i,j,k;    for(i=0;i<=9;i++){        f[1][i].x[i]=1;    }    mi[1]=1;    for(i=2;i<=13;i++){        mi[i]=mi[i-1]*10;    }    for(i=2;i<=13;i++){        for(j=0;j<=9;j++){            for(k=0;k<=9;k++){                f[i][j]=f[i][j]+f[i-1][k];            }            f[i][j].x[j]+=mi[i];        }    }    ll l,r;    scanf("%lld%lld",&l,&r);    data ans=cal(r)-cal(l-1);    printf("%lld",ans.x[0]);    for(i=1;i<=9;i++){        printf(" %lld",ans.x[i]);    }    printf("\n");    return 0;} /* */



0 0
原创粉丝点击