蒟蒻刚学数位dp 求调
查看原帖
蒟蒻刚学数位dp 求调
625380
FriedrichC楼主2022/10/11 15:31

rt,样例过了

#include<bits/stdc++.h>
#define int long long
using namespace std;
int dp[15][15],num[15];
int dfs(int pos,int cnt,bool zero,bool lim,int d)
{
    if(pos==0)return cnt;
    if(!lim&&!zero&&dp[pos][cnt]!=-1)return dp[pos][cnt];
    int ans=0;
    int mxd=lim?num[pos]:9;
    for(int i=0;i<=mxd;++i)
        ans+=dfs(pos-1,cnt+((!zero||i)&&(i==d)),lim&&i==mxd,zero&&!i,d);
    if(!lim&&!zero)dp[pos][cnt]=ans;
    return ans;
}
int solve(int x,int d)
{
    int len=0;
    while(x)num[++len]=x%10,x/=10;
    memset(dp,-1,sizeof(dp));
    return dfs(len,0,1,1,d);
}
signed main()
{
    int a,b;
    cin>>a>>b;
    for(int i=0;i<=9;++i)
        cout<<solve(b,i)-solve(a-1,i)<<" ";
	return 0;
}

2022/10/11 15:31
加载中...