求救 90分 玄关

P2602 [ZJOI2010] 数字计数

可参考一下 ```cpp #include<bits/stdc++.h> using namespace std; using ll=long long; ll dp[14][14]; int main(void){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); string low;cin>>low; string high;cin>>high; int n=high.size(); low=string(n-low.size(),'0')+low; for(int k=0;k<=9;++k){ memset(dp,-1,sizeof(dp)); function<ll(int,int,bool,bool,bool)>f=[&](int idx,int cnt,bool lim_lo,bool lim_hi,bool is_)->ll{ if(idx==n)return cnt; if(!lim_lo&&!lim_hi&&is_&&dp[idx][cnt]!=-1)return dp[idx][cnt]; int lo=lim_lo?low[idx]-'0':0; int hi=lim_hi?high[idx]-'0':9; ll res=0; for(int d=lo;d<=hi;++d){ res+=f(idx+1,cnt+(d==k&&(d||is_)),d==lo&&lim_lo,d==hi&&lim_hi,is_||d); } if(!lim_lo&&!lim_hi&&is_)dp[idx][cnt]=res; return res; }; cout<<f(0,0,true,true,false)<<" "; } return 0; } ```
by jayket @ 2024-01-15 22:04:37


@[_Violet_Evergarden](/user/522067) 您记忆化搜索中存在问题 hack: ```latex 1 1111111111 ``` 输出为: ```latex 998765431 1011111120 887654321 887654321 887654321 887654321 887654321 887654321 887654321 887654321 ``` 标准输出: ```latex 987654321 1111111120 987654321 987654321 987654321 987654321 987654321 987654321 987654321 987654321 ```
by xiao__xiao @ 2024-01-18 14:11:06


@[xiao__xiao](/user/1015805) 请问是哪里有问题呢
by _Violet_Evergarden @ 2024-01-18 14:24:09


@[_Violet_Evergarden](/user/522067) ```cpp #include<bits/stdc++.h> using namespace std; typedef unsigned long long ll; ll l,r; ll f[1011][1011]; ll num[1011]; ll mod=1e9+7; ll e; ll dfs(ll pos,ll x,bool limit,ll sum,bool p){ if(!pos) return sum; if(!limit&&f[pos][sum]!=-1 && p){ return f[pos][sum]; } ll ans=0; ll up=limit?num[pos]:9; if(p==1){ for(ll i=0;i<=up;i++){ ans+=dfs(pos-1,x,limit&&i==num[pos],sum+(i==x),p); } } else{ for(ll i=1;i<=up;i++){ ans+=dfs(pos-1,x,limit&&i==num[pos],sum+(i==x),1); } ans+=dfs(pos-1,x,0,0,0); } if(!limit && p){ f[pos][sum]=ans; } return ans; } ll solve(ll a,ll k){ e=0; if(a==0){ num[++e]=0; } while(a){ num[++e]=a%10; a/=10; } return dfs(e,k,1,0,0); } int main() { memset(f,-1,sizeof f); cin>>l>>r; ll ans=0; for(ll i=0;i<=9;i++){ cout<<solve(r,i)-solve(l-1,i)<<" "; ans=0; } return 0; } ``` 边界判断那块错了
by xiao__xiao @ 2024-01-18 18:40:27


@[xiao__xiao](/user/1015805) 谢谢大佬 已关
by _Violet_Evergarden @ 2024-01-18 19:07:14


|