数位dp

xiaoxiao2021-02-28  80

【what is 数位dp?

说白了,就是为了解决一类与数位有关的区间统计问题,无法暴力求解,只能在数位上进行操作。而这样往往需要做一些预处理,于是就用到了这东西。

【how to?

从高到低枚举第一次<n对应位,之后的位就可以从0...0~9...9了,预处理后就可以直接统计了。

看起来很简单可是蒟蒻如我只AC了3道..........

以hdu2089为例【我知道代码很丑你们将就着看吧】。

预处理如下。

 

f[0][0]=1; for(i=1;i<=6;i++) for(j=0;j<=9;j++) if(j!=4) for(k=0;k<=9;k++) if(j!=6||k!=2) f[i][j]+=f[i-1][k];

然后这是统计。

 

 

for(i=dgs;i>0;i--) { for(j=0;j<(m/d[i])||(i==1&&j==m);j++) if(j!=4&&(j!=2||(m/d[i+1])!=6)) ans1+=f[i][j]; if(((m/d[i])==4)||((m/d[i])==2&&(m/d[i+1])==6)) break; }

(其实我觉得把原数单独挑出来判断是不是会更好..........................................

 

 

【一些题目(不定期更新)

hdu 2089

 

转载请注明原文地址: https://www.6miu.com/read-76338.html

最新回复(0)