萌新刚学DP,样例过不去求助

P2602 [ZJOI2010] 数字计数

```cpp #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const int MAXN(30); ll a,b; ll dp[MAXN][10]; int res[MAXN],len; ll cnt[10][2]; inline void dfs(int pos,bool flag,bool lim) { if(pos>len) return; int rng=lim?res[pos]:9; for(register int i=0;i<=9;i++) { if(!flag||i!=0) ++dp[pos][i]; dp[pos][i]+=dp[pos-1][i]; dfs(pos+1,flag&&i==0,lim&&i==rng); } return; } inline void solve(ll x,int p) { memset(dp,0,sizeof(dp)),len=0; while(x) { res[++len]=x%10; x/=10; } reverse(res+1,res+1+len); dfs(1,true,true); for(register int i=0;i<=9;i++) cnt[i][p]=dp[len][i]; return; } int main() { scanf("%lld%lld",&a,&b); solve(b,0); solve(a-1,1); for(register int i=0;i<=9;i++) printf("%lld ",cnt[i][0]-cnt[i][1]); puts(""); return 0; } ```
by UperFicial @ 2022-04-07 14:36:50


|