第7周作业1——背包问题。
来源:互联网 发布:java标准字符串转日期 编辑:程序博客网 时间:2024/06/06 10:54
import java.io.File; import java.io.PrintWriter; import java.util.Scanner; public class Knapsack { static String path="E:/Knapsack.txt"; static String resultPath="E:/KnapsackResult.txt"; private int[] v;//存储物品的价值 private int[] w;//存储物品的重量 private int allWeight;//背包容纳重量 private int allNum;//物品数量 private int MValue[][];//fValue[i][j]存储前i个物品的重量为j的最大价值 public Knapsack(int allWeight,int allNum){ this.allNum=allNum; this.allWeight=allWeight; this.v=new int[allNum]; this.w=new int[allNum]; this.MValue=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[][] getMValue() { return MValue; } public void setMValue(int[][] fValue) { this.MValue = MValue; } public static void main(String[] args) { Scanner scanner=null; PrintWriter writer=null; try { scanner=new Scanner(new File(path)); writer=new PrintWriter(new File(resultPath)); int allWeight=scanner.nextInt();//背包总重量 int allNum=scanner.nextInt();//物品数量 Knapsack kna= new Knapsack(allWeight,allNum);//初始化背包 int[] v=kna.getV(); int[] w=kna.getW(); int[][] Mvalue=kna.getMValue(); int i=1; for(i=1;i<=allNum;i++){//初始化物品价值数组和重量数组 w[i-1]=scanner.nextInt(); v[i-1]=scanner.nextInt(); } for(i=1;i<=allNum;i++){ Mvalue[i][0]=0; } for(i=1;i<=allWeight;i++){ Mvalue[0][i]=0; } for(i=1;i<=allNum;i++){ for(int j=1;j<=allWeight;j++){ if(j<w[i-1]){ Mvalue[i][j]=Mvalue[i-1][j]; }else{ Mvalue[i][j]=Math.max(Mvalue[i-1][j], Mvalue[i-1][j-w[i-1]]+v[i-1]); } } } System.out.println("背包中物品的最大价值是:"+Mvalue[allNum][allWeight]); kna.traceBack(v, w, Mvalue, allWeight, allNum);//求出物品编号和背包总重量 System.out.println("构造的二维表格输出结果:"); for(i=1;i<=allNum;i++){//输出二维数组到文本文件KnapsackResult.txt中 for(int j=1;j<=allWeight;j++){ System.out.print(Mvalue[i][j]+" "); writer.print(Mvalue[i][j]+" "); } System.out.println(); writer.println(); } } catch (Exception e) { e.printStackTrace(); }finally{ if(scanner!=null) scanner.close(); if(writer!=null) writer.close(); } } public void traceBack(int[] v,int[] w,int[][] Mvalue,int allWeight,int allNum){ int wupinNo[]=new int[allNum+1]; int j=allWeight; for(int i=allNum;i>0;i--){ if(Mvalue[i][j]>Mvalue[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); } }
二维表格文件KnapsackResult.txt下载地址http://download.csdn.net/download/u010917502/7260037
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——背包问题
- 基础语法知识记录
- eclipse+spket+Extjs4.2.1开发环境搭建
- DIY个照相机-Delphi实现摄像头拍照功能
- 黑马程序员-Java中设置Path、classpath的作用及实例
- Binary search and its variation
- 第7周作业1——背包问题。
- Reverse Integer
- Android App----Mr Expense 之主界面
- 安装mysql server5.5 到start service未响应
- Perl-LWP文档
- java中的多线程
- VMware 提示虚拟机正在使用中,无法启动虚拟机
- linux vncserver 远控
- Sdut 2416 Fruit Ninja II(山东省第三届ACM省赛 J 题)(解析几何)