我正在尝试确定是否可以使用DP或优先级队列解决以下问题:
1)我有一组对象。我的目标是选择足够的分数来给我最高分,同时实现约束。
2)每个物体的特征。每个对象都有一个分数和与之相关的深度。
3)约束:最终对象集的深度总和必须<= 100
例如
指数/分数/深度(以下数字如下)
1 70 10
2 60 30
3 40 50
4 40 25
5 30 35
这些可能的输出可以是
得分总和/深度总和(相应数字如下)
170 90(即对象1,2,3)
200 100(即对象1,2,4,5) - 获胜者
130 90(即对象2,4,5)
150 85(即物体1,3,4)
140 95(即物体1,3,5)
以上表明,贪婪的方法不会起作用,即总是得分最高或成本最低。例如,拍摄物体4,5(总得分70,总深度60)优于仅采用物体3(得分40成本50)。因此,直接的方法不起作用,我需要探索我的整个搜索空间。所以看起来好像优先队列不起作用,不是吗? DP怎么样?有没有办法在这里应用动态编程?
答案 0 :(得分:1)
所述问题是经典背包问题的重新形成,众所周知,动态编程可以解决这个问题。有关详细信息,请参阅this Wikipedia文章。使用优先级队列的方法很可能会导致贪婪算法,可以对其进行细化以产生2近似。更确切地说,物品可以按效率分类并贪婪地使用,直到下一个物品不再适合。然后从这个解决方案和最有利可图的项目中获益。