DP 练习(持续更新)

1.  https://atcoder.jp/contests/abc135/tasks/abc135_d  

题意 : 给一个只包含 '?' 和数字'0'~'9'的字符串,  可以把每个'?' 转换成 0 ~ 9 中的任意一个数字,求问整个字符串组成的数字中对13取膜后的余数为5的个数是多少. 由于答案很大,因此答案对1e9+7取模.

思路 : dp[i][j] 用前i个字符组成的数字对13取余的结果为j的个数是多少。。对13取余只有0~12这12种情况。如果当前字符是一个问号,那么我们从0~9对当前位置的数字进行枚举,然后我们发现,假设枚举当前位之前的数字是a, 当前数字用b代替,那么有如下的式子, (10 * a + b) % 13 =  (10 * (a % 13) + b % 13), 而 a % 13 是当前位之前的所有字符组成的数字对13取余得到的结果,因此也就可以根据i-1, 和i对13取余的式子很容易看出来怎么写转移方程了。边界条件是dp[0][0] = 1。最后我们需要的答案是dp[n][5]即为所求.。

你可能感兴趣的:(DP 练习(持续更新))