【发布时间】:2016-09-03 13:30:40
【问题描述】:
我需要帮助解决这个动态规划问题。
给定一个正整数
k,求和为k的不同正整数的最大数目。例如,6 = 1 + 2 + 3,所以答案是 3,而 5 + 1 或 4 + 2 是 2。
我首先想到的是我必须找到一个子问题。所以要找到k 的最大和,我们需要找到小于k 的值的最大和。所以我们必须遍历值1 -> k 并找到这些值的最大总和。
让我困惑的是如何制作公式。我们可以将M(j) 定义为与j 相加的不同值的最大数量,但我该如何编写它的公式呢?
到目前为止,我的逻辑是否正确,有人可以解释如何逐步完成此操作吗?
【问题讨论】:
-
我不认为动态编程是必要的。只需找到最大的整数 n 使得 n(n+1)/2
-
对此有一个封闭形式的解决方案,它比任何其他已发布的解决方案都更有效。我把它发布了一段时间,但人们不理解它并否决了它,所以我删除了它。您将不得不满足于效率较低的解决方案。
-
所有你需要做的就是找到小于目标的最大三角数。该三角形数的顺序就是答案。
-
如果不同的正整数是从输入数组中获取的,并且不是连续的正整数,那么这将是一个动态规划问题。所以我不得不怀疑你是否搞砸了问题描述。
-
提示:在纸上解决数字 1 到 20 的问题。你能描述一下模式吗?
标签: c algorithm dynamic-programming