前言:
目前同学们对“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动态规划背包问题