获得一笔金额需要多少加号?

时间:2013-01-29 19:23:38

标签: dynamic-programming

我在topcoder上遇到了问题,我遇到了DP问题(http://goo.gl/hjeaS

这应该有一个有效的dp解决方案,但我被卡住了。我拿了一个数组res [i] [j] [k]来存储子问题,但我无法弄清楚执行情况,特别是更精细的细节。

r [i] [j] [k]会存储最小数量。要在i和j之间插入加号,以获得总和k。 所以,我在i,j& k,在i&之间的每个位置插入加号学家在循环遍历所有元素i到j(对于特定和,k)之后,将获得最小值。 我不确定数组的初始值,以及限制应该是什么。有更有效的解决方案吗? (我似乎是O(n³k))

P.S我知道还有另一个类似的问题,但没有一个答案真正解释了解决问题的dp解决方案背后的逻辑/代码。

1 个答案:

答案 0 :(得分:0)

我认为2d数组足以解决这个问题,因为你需要插入的是一个加号,没有括号或优先级,所以只需使用res [i] [j]来记录数据。

让res [i] [j]表示最小值。要为第一个i字符插入加号,以获得总和j。因此,整个时间复杂度将为O(n ^ 2 * k)