01背包问题思路由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“完全背包问题算法”。
0-1背包问题通用算法:(算是非贪心算法吧,当然也用到贪心思想,每次取最大值)
1.假设:
n种物品,种类1,2,…,n;每种物品质量m[0],m[1],m[2],…,m[n-1];每种物品价值v[0],v[1],…,v[n-1];背包能承受的总质量为mk,设数组dp[1],dp[2],…,dp[mk-1],dp[mk](注意,dp不包含0包含mk)表示当包内放了1,2,…,mk-1,mk质量的东西时能达到的最大价值。
2.问题:
如何安排放置在背包里的物品使得背包内物品总价值能达到最大?(假设每种类型物品个数是无限的)
3.算法:
第一步:将n种物品按照质量从小到大排序,相应的价值也要跟着质量数组m的变化而变化,保持对应关系。
第二步:按照如下算法进行
for(i = 0;i
{
for(j = m[i];j
}
最终执行完毕后,dp[mk]值即为包内放置mk质量的东西时能达到的最大价值的值!
4.特例:
当题目只给你质量而没有价值时,不放设价值和质量取相同值,转化为特殊的0-1背包问题,如上解问题。当题目只给你价值而没有质量时也不妨设质量和价值取相同值,同样用上述方法解决问题。
5.思路: 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。可以压缩空间,f[v]=max{f[v],f[v-c[i]]+w[i]}
#include int c[10][100];/*对应每种情况的最大价值*/ int knapsack(int m,int n) { int i,j,w[10],p[10]; printf("请输入每个物品的重量,价值:\n"); for(i=1;iscanf......
一些项目――背包问题(整理7篇)由网友“也无风雨也无晴”投稿提供,小编在这里给大家带来一些项目――背包问题,希望大家喜欢!篇1:一些项目――背包问题 Problem Description对于......
0-1背包问题问题描述给定n种物品和一背包,物品i的重量是wi,其价值是pi,背包的容量是M,如何选择装入背包中的物品总价值最大? 问题分析记c[i][m] 表示前i个物品,在背包容量大小为m......
P07: 有依赖的背包问题 简化的问题这种背包问题的物品间存在某种“依赖”的关系。也就是说,i依赖于j,表示若选物品i,则必须选物品j。为了简化起见,我们先设没有某个物品既依赖于......
2009届 电子信息科学与技术专业 数据结构课程设计背包问题的求解摘要 组合优化问题的求解方法研究已经成为了当前众多科学关注的焦点,这不仅在于其内在的复杂性有着重要的理......