《【精编】实验报告:动态规划---0-1背包问题).pdf》由会员分享,可在线阅读,更多相关《【精编】实验报告:动态规划---0-1背包问题).pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 XXXX 大 学 计 算 机 学 院 实 验 报 告计算机学院 2017 级软件工程专业5 班指导教师学号姓名 2019年 10 月 21 日成绩课程算法分析与设计实 验动态规划-0-1背包问题实验目的理解递归算法的概念通过模仿0-1 背包问题,了解算法的思想练习 0-1 背包问题算法实验仪器和器材电脑、jdk、eclipse2 实验内容、上机调试程序、程序运行结果实验内实验:0-1 背包算法:给定 N种物品,每种物品都有对应的重量weight 和价值 value,一个容量为 maxWeight的背包,问:应该如何选择装入背包的物品,使得装入背包的物品的总价值最大。(面对每个物品,我们只有
2、拿或者不拿两种选择,不能选择装入物品的某一部分,也不能把同一个物品装入多次)代码如下所示:publicclass KnapsackProblem/*param weight 物品重量*param value 物品价值*param maxweight 背包最大重量*return maxvalueij中,i 表示的是前 i 个物品数量,j 表示的是重量*/publicstaticint knapsack(int weight,int value,intmaxweight)intn=;包问题的算法思想:将前 i 个物品放入容量为 w的背包中的最大价值。有如下两种情况:若当前物品的重量小于当前可放入的
3、重量,便可考虑是否要将本件物品放入背包中或者将背包中的某些物品拿出来再将当前物品放进去;放进去前需要比较(不放这个物品的价值)和(这个物品的价值放进去加上当前能放的总重量减去当前物品重量时取i-1 个物品是的对应重量时候的最高价值),如果超过之前的价值,可以直接放进去,反之不放。若当前物品的重量大于当前可放入的重量,则不放入背包问题利用动态规划的思路可以这样理解:阶段是“物品的件数”,状态就是“背包剩下的容量”,fi,v表3 容、上机调试程序、程序运行结果实示设从前 i 件物品中选择放入容量为V的背包的最大价值。那么状态转移的方法为:fiv=maxfi-1v,fi-1v-wi+ci这个方程可以理解为:只考虑子问题“将前i 个物品放入容量为 v的背包中的最大价值”那么可以考虑不放入i,最大价值就和 i 无关,就是 fi-1v,如果放入第 i 个物品,价值就是 fi-1v-wi+valuei,只取最大值即可。4 验内容、上机调试程序、程序运行结果