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