动态编程算法,用于查找具有可被3整除的n位数的数量

时间:2015-02-06 11:50:18

标签: algorithm dynamic-programming

为以下问题提供动态编程解决方案。给定数n> 0, 计算具有可被3整除的n位数的自然数的数量,而不是 包含数字“1”。

提示:该表的大小为n×3

我突然想到这一天不能发现闷热。

1 个答案:

答案 0 :(得分:1)

动态编程通常涉及将解决方案与较小的子问题相结合的递归关系。

对于您的问题,请注意,对于可被3整除的数字,其数字总和必须可被3整除。让我们:

dp[i, s] = how many numbers with i digits have sum of digits s

我们有:

dp[i, s] = dp[i - 1, s] +        <- use digit 0
           dp[i - 1, s - 2] +    <- use digit 2
           dp[i - 1, s - 3] +    <- use digit 3
           ...
           dp[i - 1, s - 9]      <- use digit 9

这确实可以通过使用模n x 3求和来优化到n x S表(它现在是3)。那个和基础案例留作练习或至少延迟到你展示一些工作。