Algorithm 实现利润最大化的动态算法
问题是:假设一个学生有Algorithm 实现利润最大化的动态算法,algorithm,dynamic-programming,Algorithm,Dynamic Programming,问题是:假设一个学生有n个项目和m个小时来做项目。他必须管理好自己的时间,以获得尽可能多的分数 通过在每个项目上工作1小时,他可以抓住不同的要点。 例如,在项目1上工作一小时,他可以得到2分,如果他在项目1上工作两小时,他可以得到2.25分。 项目2不同——在项目2上工作1小时,他可以得到1分,但在项目2上工作2小时,他可以得到2.5分 另一个例子: m=5,n=10。意味着有5个项目和10个小时的时间来做这些项目 projectnumber hours to complete 1 hou
n个
项目和m个
小时来做项目。他必须管理好自己的时间,以获得尽可能多的分数
通过在每个项目上工作1小时,他可以抓住不同的要点。例如,在项目1上工作一小时,他可以得到2分,如果他在项目1上工作两小时,他可以得到2.25分。
项目2不同——在项目2上工作1小时,他可以得到1分,但在项目2上工作2小时,他可以得到2.5分 另一个例子: m=5,n=10。意味着有5个项目和10个小时的时间来做这些项目
projectnumber hours to complete 1 hour work 2h work 3h work 4h work
1 3 1.5 2 2.25 _
2 4 0.5 1.75 2 2.25
3 3 2 2.25 2.5 _
4 2 1 2 _ _
5 5 1 2 2.5 3
我能理解的是:
经过思考,我明白了这就像作业调度,也许解决这个问题最好的算法是动态规划算法
首先,你应该考虑项目的第一个小时。并按利润递减排序
2 1.5 1 1 0.5
完成项目3的第一个小时后,应将项目3的第二个小时添加到列表中(剩余9小时)
它应该一直持续到你必须完成项目的10个小时结束
projectnumber hours to complete 1 hour work 2h work 3h work 4h work
1 3 1.5 2 2.25 _
2 4 0.5 1.75 2 2.25
3 3 2 2.25 2.5 _
4 2 1 2 _ _
5 5 1 2 2.5 3
但是我确信这个算法有一些问题。其中之一是,也许项目的第二个小时会让你抓住一个好的观点。所以你不能只考虑项目的第一个小时。
projectnumber hours to complete 1 hour work 2h work 3h work 4h work
1 3 1.5 2 2.25 _
2 4 0.5 1.75 2 2.25
3 3 2 2.25 2.5 _
4 2 1 2 _ _
5 5 1 2 2.5 3
有什么建议吗?您的问题似乎与0-1背包问题类似:-
Knapsack(N,M) = max(Knapsack(N-1,M),Knapsack(N-1,M-1)+Points[N][1]+Knapsack(N-1,M-2)+Points[N][2]......)
注:-点数[N][k]=项目N中工作k小时所获得的点数
对我来说,这听起来像是一个贪婪的算法,而不是DP。谢谢编辑Dukeling。你是说它就像背包?!!你描述的算法听起来很像,但是你提到了动态规划,所以我想我应该指出这一点。(但是,是的,听起来很像背包问题)如果项目2第4小时的分数是30分怎么办?在预算为10小时的情况下,贪婪算法永远不会接近它。DP方法可能需要稍加修改。。。(例如,你不能在不工作的第一个小时工作第二个小时)是的,问题是你应该一个小时一个小时地做每一个项目。你有两个小时的时间拿到最好的分数。项目1:hour1:3小时R2:3.5项目2:hour1:0.5小时R2:5。。所以这个算法fails@SamanParser检查问题的公式以解决您的问题