下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验题目:背包问题实验目的:掌握动态规划、贪心算法的原理,并能够按其原理编程实现解决背包问题,以加深对上述方法的理解。实验内容:一个旅行者准备随身携带一个背包. 可以放入背包的物品有n 种, 每种物品的重量和价值分别为 wj , vj . 如果背包的最大重量限制是 b, 怎样选择放入背包的物品以使得背包的价值最大?目标函数:约束条件:线性规划问题 由线性条件约束的线性函数取最大或最小的问题整数规划问题 线性规划问题的变量 xj 都是非负整数Fk(y):装前 k 种物品, 总重不超过 y, 背包的最大价值i(k,y):装前 k 种物品, 总重不超过 y, 背包达最大价值时装入物品的最大标号递推方
2、程、边界条件、标记函数实例计算:v1 = 1, v2 = 3, v3 = 5, v4 = 9, w1 = 2, w2 = 3, w3 = 4, w4 = 7, b = 10 Fk(y) 的计算表如下:K/y1234567891010112233445201334667993013556810101140135569101012实验步骤: 1、分析题目; 2、打开NetBeans软件,新建一个名叫 Knapsackdxj的项目,并对其进行保存; 3在新建的项目下对我们所分析的题目进行编写; 4、调试所编写的程序; 5、运行文件,并对其进行测试,看是否正确。实验结果:实验小结:在做本次实验之前,自
3、己对动态规划、贪心算法的原理不是非常的理解,花了很多时间看了课本上的相关内容。当你懂得算法的基本原理后,再参考老师所提供的代码进行完善补充,必须结合算法的实际情况对代码中的相关变量进行修改,这样才能充分利用课本所提供的代码完成本次实验。通过本次试验,自己基本上掌握上述算法解背包问题的原理,达到实验的目的。实验代码:Knapsack.Javapackage chap4;import java.util.Scanner;/* * * author Jinyu */public class Knapsack /*常量定义* static final int MAX_NUM = 20; static
4、final int MAX_WEIGHT = 100;/*自定义数据结构* /*题目描述中的变量* private final int weight = new intMAX_NUM; private final int value = new intMAX_NUM; private final int x = new intMAX_NUM; private final int m = new intMAX_NUMMAX_NUM; private final int s = new intMAX_NUMMAX_NUM; private int n; private int w; int h;
5、int l;/*算法实现* public void solve() int k = 1; int a = 1; for (int i = 1; i = n; i+) for (int j = 1; j = w; j+) a = 1; k = 1; if (weighti = j) h = weighti; l = valuei; while (h mi - 1j - h + l | mij (mi - 1j - h + l) /判断是否应该装入 if (k = 1) /第一次的时候才执行不放入的操作,k不等于1的时候保持上一次操作的结果不进行改变 mij = mi - 1j;/不装入 sij
6、= 0; a = 0; else mij = mi - 1j - h + l;/应该装入 sij = k;/存放装入次数,用于求最优解 k+;/装入后k加1 h = weighti * k; l = valuei * k;/ System.out.println(h + e);/测试 / System.out.println(h + c);/ System.out.println(i + + j + + mij);/测试 else if (mij mi - 1j) /无法装入 mij = mi - 1j; if (k = 1) sij = 0; / System.out.println(i +
7、 + j + + mij);/测试 System.out.println(可装入物品的最大价值为: + mnw);/ for (int i = 1; i = n; i+) /测试/ for (int j = 1; j 1; i-) /由最后一个数据向上推算 y = y - xi * weighti; xi - 1 = si - 1y;/将每个物品的装入信息存放起来 for (int i = 1; i = n; i+) System.out.println(第 + i + 个物品放入 + xi + 样); public void input() Scanner scanner = new Sca
8、nner(System.in); System.out.println(请输入背包能够承受的总重量:); w = scanner.nextInt(); System.out.println(请输入可以装入背包的物品的种类:); n = scanner.nextInt(); System.out.println(请输入 + n + 种物品中每一种物品的重量和价值:); for (int i = 1; i = n; i+) weighti = scanner.nextInt(); valuei = scanner.nextInt(); Test.javapackage chap4;/* * * author Jinyu */public class Test /* * param args the command line arguments */ public static void main(String args) /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 经编钳针工技术知识强化考核试卷含答案
- 烧碱盐水工岗位应急演练考核试卷含答案
- 液晶显示器件模组制造工岗位诚信考核试卷含答案
- 15.女娲补天教案
- 高校绩效工资制度的实践与优化-以N大学为样本的深度剖析
- 高校新专业设置:基于需求与发展的深度剖析
- 高校后勤社会化改革模式探索:以T大学为例
- 高校低碳教育:塑造大学生绿色消费新范式
- 高新技术企业无形资产价值贡献评价体系:理论、构建与应用
- 负压吸引管理制度
- 2026北京外国语大学纪检监察岗位招聘建设笔试模拟试题及答案解析
- 2026年中级注册安全工程师《其他安全实务》考前冲刺训练试卷及参考答案详解(综合卷)
- (2025年)NICE指南:老年人和50岁及以上高危人群跌倒的评估和预防(NG.249)解读
- 中国主动脉夹层诊疗指南(2025版)
- 7.3 云南省(课件42张)- 星球版地理八年级下册
- 肺气肿的课件
- 猫砂制作技术指导
- 2026及未来5年中国氮化硅陶瓷行业市场行情动态及前景战略研判报告
- 中科曙光公司在线测评题
- 基层工会组织内控制度
- 2026年湖南环境生物职业技术学院单招职业技能考试题库新版
评论
0/150
提交评论