抽象代码4AC,4TLE,2WA 求调
#include<bits/stdc++.h>
using namespace std;
int a,b,l1;
int l[15];
int dp[15][15][2][2];
bool mem[15][15][2][2];
int dfs(int pos,int lst,bool lim,bool flag){
if(pos==0) return 1;
if(mem[pos][lst][lim][flag]) return dp[pos][lst][lim][flag];
int ret=0;
for(int i=0;i<=(lim?l[pos]:9);i++)
if(flag || abs(i-lst)>1) ret+=dfs(pos-1,i,lim && (i==l[pos]),flag && (!i));
mem[pos][lst][lim][flag]=1;
return dp[pos][lst][lim][flag]=ret;
}
int caculate(int x){
memset(dp,0,sizeof(dp));
memset(mem,0,sizeof(mem));
int i=1,len=1;
for(;;len++,i*=10){
if(i>x){
i/=10;
len--;
l1=len;
break;
}
}
for(;i;len--,i/=10) l[len]=x%(i*10)/i;
return dfs(l1,0,1,1);
}
int main(){
cin>>a>>b;
cout<<caculate(b)-caculate(a-1)<<endl;
return 0;
}
感谢大佬 祝大佬RP++