不加 O2 AC,加 O2 全 TLE,之前是当可以随便填时令pre==-2
,会出现数组访问到负数下标,现在改成了pre==12
为什么还是 ub
#include<bits/stdc++.h>
using namespace std;
int l,r,len,a[15],f[15][15];
int dfs(bool limit,bool lead,int pos,int pre)
{
if(pos==0)return 1;
if(!limit&&!lead&&f[pos][pre])return f[pos][pre];
int res=0;
int up=limit?a[pos]:9;
for(int i=0;i<=up;i++)
{
if(abs(pre-i)<2)continue;
if(lead&&i==0)res+=dfs(limit&(i==a[pos]),lead&(i==0),pos-1,12);
else res+=dfs(limit&(i==a[pos]),lead&(i==0),pos-1,i);
}
if(!limit&&!lead)f[pos][pre]=res;
return res;
}
int ask(int k)
{
len=0;
while(k)
{
a[++len]=k%10;
k/=10;
}
dfs(1,1,len,12);
}
int main()
{
scanf("%d%d",&l,&r);
printf("%d",ask(r)-ask(l-1));
return 0;
}