042 - Multiple of 9(★4)
キーワード
解説
に注意すると, K
が 9 の倍数でない時は, 0 を出力し, 9 の倍数の時は, 各位の数字の和がK
であるような通りの数を出力すれば良い.
動的計画法を用いる.
各位の和が であるような通りを dp[n]
とする.
各 について, 各位の和が, であるような整数の一桁目に をつけると, 各位の和は となる. 従って, が従う.
計算量は .
提出コード
func min(a, b int) int {
if a < b {
return a
}
return b
}
func main() {
var k int
scanIntVariables(&k)
mod := 1000000007
if k%9 != 0 {
writeLine(0)
return
}
dp := make([]int, k+1)
dp[0] = 1
for i := 1; i <= k; i++ {
for j := 1; j <= min(i,9); j++ {
dp[i] += dp[i-j]
dp[i] %= mod
}
}
writeLine(dp[k])
}