dp格式能写出来,尝试写记忆化后发现死活改不对,也不知道错了。有没有人能帮忙看一下。 (编译运行输入后没有结果,也没有爆栈,就一直在那运行)
代码如下
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ri register int
#define int long long
using namespace std;
const int N=20;
int l,r,id,num[N],f[N][N];
inline int read () {
int x=0,y=1; char c=getchar();
while (c<'0'||c>'9') {if (c=='-') y=-1; c=getchar();}
while (c>='0'&&c<='9') {x=(x<<3)+(x<<1)+(c-'0'); c=getchar();}
return x*y;
}
int dfs (int now,int x,bool flag,bool lim) {
int ans=0;
if (now==0) return x;
if (!lim&&(!flag)&&f[now][x]!=-1) return f[now][x];
for (ri j=0; j<=lim?num[now]:9; j++) {
bool book=flag&&(j==0);
ans+=dfs(now-1,x+((!book)&&(j==id)),flag&&(j==0),(j==num[now])&&lim);
}
if ((!lim)&&(!flag)) f[now][x]=ans;
return ans;
}
inline int work (int n,int m) {
int cnt=0;
memset(f,-1,sizeof f);
while (n) {
num[++cnt]=n%10; n/=10;
}
return dfs(cnt,0,1,1);
}
signed main () {
l=read(); r=read();
for (id=0; id<=9; id++) {
printf("%lld ",work(r)-work(l-1));
}
return 0;
}