0

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

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

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

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

4

1 回答 1

0

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

令 res[i][j] 表示最小编号。为前 i 个字符插入加号,得到总和 j。因此,整个时间复杂度将为 O(n^2*k)

于 2013-02-05T06:27:57.527 回答