萌新刚学OI求助数位dp
查看原帖
萌新刚学OI求助数位dp
566289
RP_INT_MAX楼主2022/10/6 15:49

rt,WA#2。

代码:```cpp

include

#include #include #include #include using namespace std; int f[114][514],num[1919],a,b; inline int abs(int x) {return x<0?-x:x;} int cal(int x) { int cnt=0,ans=0; memset(num,0,sizeof num); while(x) num[++cnt]=x%10,x/=10; for(int i=1;i<num[cnt];++i) ans+=f[cnt][i]; for(int i=1;i<cnt;++i) for(int j=1;j<10;++j) ans+=f[i][j]; for(int i=cnt-1;i;--i) { for(int j=0;j<num[i];++j) if(abs(j-num[i+1])>1) ans+=f[i][j]; if(abs(num[i]-num[i+1])<2) break; } return ans; } int main () { for(int i=0;i<10;++i) f[1][i]=1; for(int i=2;i<10;++i) for(int j=0;j<10;++j) for(int k=0;k<10;++k) if(abs(j-k)>1) f[i][j]+=f[i-1][k]; cin>>a>>b; cout<<cal(b+1)-cal(a)<<endl; return 0; }

2022/10/6 15:49
加载中...