- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
XXXX大 学 计 算 机 学 院 实 验 报 告
计算机学院 2017 级 软件工程 专业 5 班 指导教师
学号 姓名 2019年 10 月 21 日 成绩
课程名称
算法分析与设计
实验名称
动态规划---0-1背包问题
实验目的
①理解递归算法的概念
②通过模仿0-1背包问题,了解算法的思想
③练习0-1背包问题算法
实验仪器
和器材
电脑、jdk、eclipse
实
验
内
容
、
上
机
调
试
程
序
、
程
序
运
行
结
果
实
验
内
容
、
上
机
调
试
程
序
、
程
序
运
行
结
果
实
验
内
容
、
上
机
调
试
程
序
、
程
序
运
行
结
果
实验:0-1背包算法:给定N种物品,每种物品都有对应的重量weight和价值value,一个容量为maxWeight的背包,问:应该如何选择装入背包的物品,使得装入背包的物品的总价值最大。(面对每个物品,我们只有拿或者不拿两种选择,不能选择装入物品的某一部分,也不能把同一个物品装入多次)代码如下所示:
public class KnapsackProblem {
/**
* @param weight 物品重量
* @param value 物品价值
* @param maxweight 背包最大重量
* @return maxvalue[i][j]中,i表示的是前i个物品数量,j表示的是重量
*/
public static int knapsack(int [] weight,int [] value,int maxweight){
int n = weight.length;//物品件数
//最大价值数组为maxvalue[N+1][maxweight+1];因为数组的下标是从0开始的;maxvalue[N+1][maxweight+1]第一个数字表示的是前n+1个背包,第二个数组表示的是前n+1个背包的重量
int [] [] maxvalue = new int[n+1][maxweight + 1];
//物品件数和物品重量为0时,价值也为0
for(int i =0;i<maxweight;i++){
maxvalue[0][i]=0;
}
for(int i = 0;i<n+1;i++){
maxvalue[i][0]=0;
}
//i:表示只能拿前i件物品(数组的下标是从0开始的,所以对应到weight和value里面都是i-1的位置)
//j:表示假设能取的总重量为j
//n:表示的是物品件数
System.out.println("选中的物品是第");
for(int i=1;i<=n;i++){
for(int j=1;j<=maxweight;j++){
//当前最大价值等于放前一件的最大价值
maxvalue[i][j] = maxvalue[i-1][j];
//如果当前物品的重量小于总重量,可以放进去或者拿出别的东西再放进去
if(weight[i-1] <= j){
//比较(不放这个物品的价值)和(这个物品的价值放进去 加上 当前能放的总重量减去当前物品重量时取i-1个物品是的对应重量时候的最高价值)
if(maxvalue[i-1][j-weight[i-1]] + value[i - 1] > maxvalue[i-1][j]){
maxvalue[i][j] = maxvalue[i-1][j-weight[i-1]] + value[i - 1];
} }
} }
return maxvalue[n][maxweight]; }
public static void main(String[] args) {
int weight[] = {2,3,4,5};
int value[] = {3,4,5,7};
int maxweight = 8;
System.out.println(knapsack(weight,value,maxweight));
} }
完成效果:
心得与体会:
1.背包问题的算法思想: 将前i个物品放入容量为w的背包中的最大价值。有如下两种情况:
①若当前物品的重量小于当前可放入的重量,便可考虑是否要将本件物品放入背包中或者将背包中的某些物品拿出来再将当前物品放进去;放进去前需要比较(不放这个物品的价值)和(这个物品的价值放进去加上当前能放的总重量减去当前物品重量时取i-1个物品是的对应
文档评论(0)