数位DP模板

来源:互联网 发布:银行家算法c语言代码 编辑:程序博客网 时间:2024/06/13 19:56
#include<bits/stdc++.h>using namespace std;int a[50];int dp[50][50];int dfs(int num,    ,bool limit)   //位数,传递条件 ,上界判断{    if(num==-1)return  0;  //最后一位时,根据情况返回1或0    if(!limit && dp[num][  ]!=-1)      //已经走过此种状态        return dp[num][  ];    int ans=0;      //计数    int up=limit?a[num]:9;    //上界    for(int i=0;i<=up;i++){        ans+=dfs(num-1,    ,limit && i== up);//传递    }    if(!limit)  //判断是否可以储存        dp[num][  ]=ans;    return ans;}int solve(int x)    //将x拆开存入a数组{    int num=0;    while(x){        a[num]=x%b; //b表示进制!!!        num++;        x/=b;    }    return dfs(num-1,   ,true);//传递}int main(){    int l,r;    while(scanf("%d%d",&l,&r)!=EOF)    {        memset(dp,-1,sizeof(dp));        printf("%d\n",solve(r)-solve(l-1));    }    return 0;}

0 0
原创粉丝点击