我正在尝试确定是否可以使用DP或优先级队列解决以下问题:
1)我有一套物品。我的目标是在满足约束条件的同时,从中选择足够多的人给我最高的分数。
2)每个对象的特性。每个对象都有一个分数和与其相关联的深度。
3)约束:最终对象集的深度之和必须例如
索引/分数/深度(以下数字相应地跟随)
1970年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怎么样有没有办法在这里应用动态编程?
最佳答案
所述问题是经典背包问题的一种改进形式,众所周知,背包问题可以通过动态规划来求解有关更多详细信息,请参阅this维基百科文章。使用优先级队列的方法将最有可能导致贪婪算法,其可以被细化以产生2-近似。更准确地说,这些项目可以按效率进行排序,然后贪婪地进行,直到下一个项目不再适合为止然后从这个解决方案和最赚钱的项目中拿出更好的。
关于algorithm - 诊断动态编程与优先级队列情况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25843275/