【发布时间】:2019-10-04 08:08:52
【问题描述】:
所以我无法理解你是如何做到这一点的。你输入像 N=2 和 S=3,这意味着有多少个由 2 位数字组成的数字的总和 =3?比如 12 => 1+2= 3;对于 N=2 和 S=3 ,有 3 个数字:12、30、21。
我不太了解动态编程。你应该如何看待这个算法和类似的算法?
【问题讨论】:
-
试试谷歌。 geeksforgeeks.org/…
-
第 1 步:确定哪些数字具有该和。第 2 步:创建这些数字的所有组合。将所有可行位置的零位填充到 N 位,如果该数字超过 N 位,则拒绝。
-
动态编程就是在数据库中存储您已经完成的计算,并在需要使用它们的结果而不是再次计算时查找它们,因为查找在计算上比计算便宜.递归斐波那契的实现可以通过动态编程大大加快,但是这个问题......使用它似乎效率不高,也许......
-
除了@PaulOgilvie 所写的内容之外,如果目标只是计算数字,则不需要全部生成。您可以使用组合数学。这可能就是要使用“动态编程”部分的地方。
-
... 例如:如果你确定数字0、0、1、3之和为4,则总共有4位,2位非零,1位重复 2 次。所以这些数字的排列方式是 2 * 3! /2! (第一个数字的 2 个组合,乘以 3!其余 3 个数字的组合,除以 2!重复数字)。这些数字总共有 6 种排列方式:1003、1030、1300、3001、3010、3100。
标签: c dynamic-programming