第7周作业1——背包问题。
来源:互联网 发布:邓肯所有季后赛数据 编辑:程序博客网 时间:2024/05/29 07:17
(1)背包问题。对上文中提到的背包问题提供的表1(数据文件下载Knapsack.txt,第一行为背包总重量15,物品数量5;第2-6行,分别为第1-5件物品的重量与价值),W=15,编程计算最终背包所装物品的编号、总重量与总价值。要求能够把构造的二维表格输出到文件KnapsackResult.txt中。
package bagquestion;import java.io.File;import java.io.FileNotFoundException;import java.io.PrintWriter;import java.util.Scanner;public class bag {private int[] v;//存储物品的价值private int[] w;//存储物品的重量 private int allWeight;//背包容纳重量private int allNum;//物品数量private int fValue[][];//fValue[i][j]存储前i个物品的重量为j的最大价值public bag(int allWeight,int allNum){this.allNum=allNum;this.allWeight=allWeight;this.v=new int[allNum];this.w=new int[allNum];this.fValue=new int[allNum+1][allWeight+1];} public int[] getV() {return v;}public void setV(int[] v) {this.v = v;}public int[] getW() {return w;}public void setW(int[] w) {this.w = w;}public int[][] getfValue() {return fValue;}public void setfValue(int[][] fValue) {this.fValue = fValue;}public static void main(String[] args) throws FileNotFoundException{// TODO Auto-generated method stubScanner sc = new Scanner(new File("src/Knapsack.txt"));PrintWriter pw = new PrintWriter(new File("src/Knapsack.txt"));int allWeight=sc.nextInt();//背包总重量int allNum=sc.nextInt();//物品数量bag kna= new bag(allWeight,allNum);//初始化背包int[] v=kna.getV();int[] w=kna.getW();int[][] fvalue=kna.getfValue();int i=1;for(i=1;i<=allNum;i++){//初始化物品价值数组和重量数组w[i-1]=sc.nextInt();v[i-1]=sc.nextInt();}for(i=1;i<=allNum;i++){fvalue[i][0]=0;}for(i=1;i<=allWeight;i++){fvalue[0][i]=0;}for(i=1;i<=allNum;i++){for(int j=1;j<=allWeight;j++){if(j<w[i-1]){fvalue[i][j]=fvalue[i-1][j];}else{fvalue[i][j]=Math.max(fvalue[i-1][j], fvalue[i-1][j-w[i-1]]+v[i-1]);}}}System.out.println("背包中物品的最大价值是:"+fvalue[allNum][allWeight]);kna.traceBack(v, w, fvalue, allWeight, allNum);//求出物品编号和背包总重量System.out.println("构造的二维表格输出结果:");for(i=1;i<=allNum;i++){//输出二维数组到文本文件KnapsackResult.txt中for(int j=1;j<=allWeight;j++){System.out.print(fvalue[i][j]+" ");pw.print(fvalue[i][j]+" ");}System.out.println();pw.println();pw.close();sc.close();}}public void traceBack(int[] v,int[] w,int[][] fvalue,int allWeight,int allNum){int wupinNo[]=new int[allNum+1];int j=allWeight;for(int i=allNum;i>0;i--){if(fvalue[i][j]>fvalue[i-1][j]){wupinNo[i]=1;j-=w[i-1];if(j<0){break;}}}int sumWeight=0;//记录背包的总重量System.out.println("背包中物品的编号是:");for(int i=1;i<=allNum;i++){if(wupinNo[i]==1){System.out.print(i+" ");sumWeight+=w[i-1];}}System.out.println();System.out.println("背包的总重量是:"+sumWeight);}}
0 0
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题。
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题
- 第7周作业1——背包问题。
- 第7周作业1——背包问题
- 感官敏捷锐利的小孩[图]
- 利用AJAX和ASP.NET实现简单聊天室
- sqlite 触发器
- 黑马程序员_第二天视频学习 基本运算和流程控制
- ASP.NET中数据校验部分的封装与应用
- 第7周作业1——背包问题。
- 利用ASP.net编写发送Email程序
- nyoj104
- [Hadoop源码解读](一)MapReduce篇之InputFormat
- 堆和栈的区别
- 认知小动物的脚印[图]
- 赶集动画实现
- codeigniter源代码分析之框架目录结构
- 当心异步刷新后的脚本文件加载