BZOJ 1026 Windy数字 发表于 2017-03-14 | 更新于 2018-06-17 LinkSolution数位DP模板? 然而有一点需要注意:长度不足nnn的必须单独算(或者我没想出好办法?) 想了很长时间想巧妙地避免分开处理,发现不好避免。 所以数位DP就可以类比AC自动机DP,可以把长度小于给定串的单独处理。 Code1234567891011121314151617181920212223242526272829303132333435363738#include "lucida"int f[15][10];void DP() { for(int i=0;i<10;++i) f[1][i]=1; for(int i=1;i<=10;++i) for(int j=0;j<10;++j) for(int k=0;k<10;++k) f[i][j]+=(abs(j-k)>=2)*f[i-1][k]; //j==0? is that right?}int Cute(int x) { static int bit[15],len; //if(x==0) return 0; for(len=0,++x;x;x/=10) bit[++len]=x%10; bit[len+1]=2333; int res=0; for(int i=len-1;i;--i) for(int j=1;j<10;++j) res+=f[i][j]; for(int i=len;i;--i) { for(int j=(i==len);j<bit[i];++j) res+=(abs(bit[i+1]-j)>=2)*f[i][j]; if(abs(bit[i+1]-bit[i])<2) break; } return res;}int main() { freopen("input","r",stdin); DP(); int l,r; is>>l>>r; os<<(Cute(r)-Cute(l-1))<<'\n'; return 0;}