提醒:不是讨论区题解。
昨天做这道题,开始认为不要特意处理前导零,最后 WA on test 18.
然后把这个部分
for(int i = tot; i >= 1; i--)
{
for(int j = 0; j < digit[i]; j++)
ans = mod(ans + dp[i][j], MOD);
for(int j = tot; j >= i + 1; j--)
ans = mod(ans + mod(digit[j] * digit[i] * sum[i - 1], MOD), MOD);
}
改成了(加上处理前导零的部分)
for(int i = 1; i <= tot - 1; i++)
for(int j = 1; j <= 9; j++)
ans = mod(ans + dp[i][j], MOD);
for(int i = 1; i < digit[tot]; i++)
ans = mod(ans + dp[tot][i], MOD);
for(int i = tot - 1; i >= 1; i--)
{
for(int j = 0; j < digit[i]; j++)
ans = mod(ans + dp[i][j], MOD);
for(int j = tot; j >= i + 1; j--)
ans = mod(ans + mod(digit[j] * digit[i] * sum[i - 1], MOD), MOD);
}
这份代码可以AC。
但是我还是做过一些不要处理前导零的数位DP的,比如【hdu2089】不要62
所以想问一下,哪些题目需要特殊处理前导零,哪些不要。