数位dp模板

来源:互联网 发布:三维平面布置图软件 编辑:程序博客网 时间:2024/06/05 20:51
int digit[maxn];int dp[maxn][][][][];//维度int dfs(int num,    ,bool limit)   //位数,传递条件(dp维度),上界判断{    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){        digit[num] = x%b; //b表示进制!!!        num++;        x/=b;    }    return dfs(num-1,   ,true);//传递}int main(){    int l,r;    while(~scanf("%d%d",&l,&r)){        memset(dp,-1,sizeof(dp));        printf("%d\n",solve(r)-solve(l-1));    }    return 0;}