切割杆动态编程

时间:2017-02-08 12:05:45

标签: algorithm

给定一根长度为n英寸的杆和一系列价格,其中包含所有尺寸小于n的件的价格。使用动态编程,我们可以获得杆的最大值和相应的部件。是否有任何算法可以产生第k个最大值,同时针对此问题进行相应的切割?

1 个答案:

答案 0 :(得分:2)

问题:查找杆切割问题的最大价格k th

我认为可以通过以下方式调整算法:

更改棒切割问题的递归:

cutRod(n) = max(price[i] + cutRod(n-i-1)) for all i in {0, 1 .. n-1}

致:

Top_K_Price_CutRod(n)[] = top_k(price[i] + cutRod(n-i-1)) for all i in {0, 1 .. n-1}

基本上,在每个递归步骤中,返回该子部分的最大k价格,因为只有那些最终可以达到总体最大值k

Bruteforce方式是返回该子部分的所有可能价格,但我们确信该子部分的排名大于k的价格不能超过k的最高价格最终完成杆。

所以这里Top_K_Price_CutRod(n)[]是该子部分的k最高价格数组。 在递归的根部,您将获得最高k价格。

我认为我们不能优化这个,因为在每个递归节点,它的前k值可以在最终的前k之间。因此,您必须为所有子部分提供最高k个值。