码迷,mamicode.com
首页 > 其他好文 > 详细

[模板] 数位dp

时间:2019-01-05 13:36:11      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:self   max   code   需要   解决   rod   [1]   log   ||   

数位dp

简介

数位dp指满足特定性质的数的计数, 如求 \([l, r]\) 区间内不含 \(2\) 的数的个数.

一般来说, 数位dp利用dfs解决, 有时状态数较多, 需要hash表优化.

模板:

// 求[l,r] 中各位数字之积为特定值(prod[])数的个数
ll dp[nsz][35][25][15][15];
ll dfs(int p,ll v,ll base,ll l,ll r){
    ll maxv=v+base-1;
    if(maxv<l||v>r)return 0;
    if(p==0)return !(prod[1]||prod[2]||prod[3]||prod[4]);
    ll &tmp=dp[p][prod[1]][prod[2]][prod[3]][prod[4]];
    if(l<=v&&maxv<=r&&~tmp)return tmp;
    ll res=0;
    base/=10;
    rep(i,(v!=0),9){
        bool ok=1;
        rep(j,1,4)ok&=(add[i][j]<=prod[j]);
        if(ok==0)continue;
        rep(j,1,4)prod[j]-=add[i][j];
        res+=dfs(p-1,v+i*base,base,l,r);
        rep(j,1,4)prod[j]+=add[i][j];
    }
    if(l<=v&&maxv<=r)tmp=res;
    return res;
}

例题

[西安交大附中集训] d8 self

[模板] 数位dp

标签:self   max   code   需要   解决   rod   [1]   log   ||   

原文地址:https://www.cnblogs.com/ubospica/p/10223868.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!