龙空技术网

动态规划问题:背包内的物品怎样装入才能价值最大?

伽马星 92

前言:

目前同学们对“java动态规划背包问题”可能比较着重,各位老铁们都想要学习一些“java动态规划背包问题”的相关资讯。那么小编也在网上网罗了一些关于“java动态规划背包问题””的相关知识,希望兄弟们能喜欢,咱们快快来了解一下吧!

题目:给定n种物品和一个背包,物品 i 的重量是wi,价值vi,背包容量为C,问如何选择装入背包的物品,使装入背包中的物品的总价值最大?对于每种物品总能选择完全装入或不装入,一个物品最多装入一次。

最近在复习,动态规划,搜索算法方面,遇到了这一题,感觉比一般的动态规划要难。

按照动态规划的的常规思路没走通,就卡在怎么去找出 i 和 i-1 的DP关系。

不过针对这一题,由于对算法没做任何要求,我倒是另辟了一条蹊径,诸位看看怎么样。

因为我们的目标是背包内的东西价值最大,而容量是一定的,而

价值 / 容量 = 单价

所以其实我们要做的就是把单价最高的物品优先放入背包即可,这样的话解题方法就很简单了。

定义一个数组 P[i],计算出每个物品的单价 P[i] = V[i] / W[i]

然后对数组P进行排序,如果是Java的话直接Array.sort(P)就结束了。

然后按照P中从大到小的顺序加入背包,直到容量到达C为止。

Java实现代码就略了,没有什么难点。

标签: #java动态规划背包问题