为什么 ll sovle()忘记写return,不开O2可以AC
https://www.luogu.com.cn/record/197888498
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
int nbit[30];
ll dp[30][30];
ll dfs(int pos,ll val,bool lead,bool limit){
if(pos==0)return 1;
int len = limit?nbit[pos]:9;
if(!limit&&!lead&&dp[pos][val]) return dp[pos][val];
ll ans = 0;
for(int i=0;i<=len;i++){
if(abs(i-val)<2&&!lead)continue;
ans += dfs(pos-1,i,i==0&&lead,limit&&i==len);
}
if(!limit&&!lead)dp[pos][val] = ans;
return ans;
}
ll sovle(ll n,int id){
int pos = 0;
while(n){
nbit[++pos] = n%10;
n /= 10;
}
dfs(pos,0,1,1);
}
int main(){
ll a,b;
cin>>a>>b;
cout<<sovle(b,1)-sovle(a-1,0)<<endl;
}