Skip to content

Commit 59e1bca

Browse files
committed
update P2602.md
1 parent 13d6b78 commit 59e1bca

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

Diff for: luogu/P2602.md

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
计数DP模板题
2+
```c++
3+
void solve(){
4+
//[a,b]中所有数码出现次数
5+
ll x, y, cnt;
6+
cin >> x >> y;
7+
ll A[20], dp[20][20][2][2], digit;
8+
auto dfs = [&](auto & dfs, ll cntd, int pos, bool limit, bool lead){
9+
if(pos < 0) return cntd;
10+
if(dp[cntd][pos][limit][lead] != -1) return dp[cntd][pos][limit][lead];
11+
ll ans = 0;
12+
for(int v = 0; v <= (limit? A[pos]: 9); v++){
13+
if(lead && v == 0)
14+
ans += dfs(dfs, cntd, pos - 1, limit && v == A[pos], true);
15+
else
16+
ans += dfs(dfs, cntd + (v == digit), pos - 1, limit && v == A[pos], false);
17+
}
18+
return dp[cntd][pos][limit][lead] = ans;
19+
};
20+
auto f = [&](ll x){
21+
cnt = 0;
22+
memset(A, 0, sizeof A);
23+
memset(dp, -1, sizeof dp);
24+
while(x) A[cnt++] = x % 10, x /= 10;
25+
return dfs(dfs, 0, cnt - 1, true, true);
26+
};
27+
for(int i = 0; i <= 9; i++){
28+
digit = i;
29+
cout << f(y) - f(x - 1) << " \n"[i == 9];
30+
}
31+
}
32+
```

0 commit comments

Comments
 (0)