# | User | Rating |
---|---|---|
1 | tourist | 3993 |
2 | jiangly | 3743 |
3 | orzdevinwang | 3707 |
4 | Radewoosh | 3627 |
5 | jqdai0815 | 3620 |
6 | Benq | 3564 |
7 | Kevin114514 | 3443 |
8 | ksun48 | 3434 |
9 | Rewinding | 3397 |
10 | Um_nik | 3396 |
# | User | Contrib. |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 155 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
10 | nor | 152 |
Name |
---|
It's because your program is slow. It seems that your program makes all possible numbers and count it, but this is too slow to solve this problem.
So can you give me some hints?
use DP. I will describe you not the most effective way, but it runs in polynomial time. lets iterate over all possible final lengths for (finalLen = a[0] + ... + a[9]; finalLen <= n; ++finalLen). inside the loop we have to solve more simple problem, because we know final length. to solve this subproblem we can use dp d[digitsUsed][i] — in how many ways we can place digits (0, 1, ..., i) using totally exactly digitsUsed digits. The rest (finalLen — digitsUsed) digits would be digits (i + 1, i + 2, ..., 9).
You can visit editorial to see solution