调了好久都没看出来什么错误,请帮我看看吧!
#include<iostream>
#include<cstring>
#define ll long long
using namespace std;
ll dp[20][20][2][2];
int num[20],target;
ll dfs(int step,int now,bool zero,bool limit)
{
ll ret=0;
if(!step)
return now;
if(dp[step][now][zero][limit]!=-1)
return dp[step][now][zero][limit];
int up=(limit?num[step]:9);
for(int i=0;i<=up;i++)
{
if(!i&&zero)
ret+=dfs(step-1,now,1,limit&&(i==up));
else if(i==target)
ret+=dfs(step-1,now+1,0,limit&&(i==up));
else if(i!=now)
ret+=dfs(step-1,now,0,limit&&(i==up));
}
dp[step][now][zero][limit]=ret;
return ret;
}
ll solve(ll x)
{
int length=0;
while(x)
{
num[++length]=x%10;
x/=10;
}
memset(dp,-1,sizeof dp);
return dfs(length,0,1,1);
}
int main()
{
ll l,r;
scanf("%lld%lld",&l,&r);
for(int i=0;i<=9;i++)
{
target=i;
printf("%lld ",solve(r)-solve(l-1));
}
return 0;
}