algorithm - 动态规划算法查找可被 3 整除的 n 位数字的数量

标签 algorithm dynamic-programming

给出下列问题的动态规划解决方案。给定一个数 n>0, 计算能被 3 整除的 n 位自然数的个数,并且不 包含数字“1”。

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

我为此苦恼了好几天,却找不到解决方案。

最佳答案

动态规划通常涉及将较小子问题的解决方案组合在一起的递归关系。

对于你的问题,请注意一个数要被 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

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

关于algorithm - 动态规划算法查找可被 3 整除的 n 位数字的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28365156/

相关文章:

javascript - 正负挑战

python - 分段最小二乘的动态规划算法

c# - 查找链表的中间元素

algorithm - 当N很大时,从1到N的所有数位的异或和

algorithm - 动态规划 - 有 3 个序列。并找到最大值

python - 返回产生最大差异的值的索引

algorithm - 给定n个点,每个点都有自己的范围,调整所有点以最大化相邻点的最小距离

algorithm - 使用遗传算法解决0-1背包问题是否更好?

algorithm - 特殊条件下数组中的最大和

c++ - 如何将一个集合分成K个子集,使得子集中的元素之和最小?