为什么solve函数最后
return ans-len;
改成
return ans-len+1;
就错了 求dalao解答
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ld long double
const int maxn=100010;
const int mo=1000000007;
const int inf=0x7f7f7f7f7f7f7f7f;
int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
int l,r,num[20],dp[19][19][20000];
int dfs(int len,int pos,int c,int lim){
if(!lim&&dp[len][pos][c]!=-1)
return dp[len][pos][c];
if(len==0)
return dp[len][pos][c]=(c==0);
if(c<0)
return 0;
int tmp=0;
int maxx=lim?num[len]:9;
for(int i=0;i<=maxx;i++)
tmp+=dfs(len-1,pos,c+i*(len-pos),lim&&(i==maxx));
if(!lim)
dp[len][pos][c]=tmp;
return tmp;
}
int solve(int x){
if(x<10)
return x;
int ans=0,len=0;
while(x){
num[++len]=x%10;
x/=10;
}
memset(dp,-1,sizeof(dp));
for(int pos=1;pos<=len;pos++)
ans+=dfs(len,pos,0,1);
return ans-len;
}
signed main(){
l=read();
r=read();
printf("%lld\n",solve(r)-solve(l-1));
return 0;
}