第7周作业1——背包问题
来源:互联网 发布:java目标字符串替换 编辑:程序博客网 时间:2024/04/29 22:00
package pack; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Scanner; public class Knapsack { private int[] v;//存储物品的价值 private int[] w;//存储物品的重量 private int allWeight;//背包容纳重量 private int allNum;//物品数量 private int fValue[][];//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.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) { String path="E:\\Knapsack.txt"; String resultPath="E:\\KnapsackResult.txt"; 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[][] fvalue=kna.getfValue(); 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++){ 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]+" "); writer.print(fvalue[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[][] 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——背包问题
- editplus正则匹配查找替换
- C#将数据转换为指定类型,支持对可空类型(Nullable类)转换方法示例
- IT和烹饪,哪个更难?(1)
- 基于COM和.Net视图状态的Asp.net
- 自动升级出错:80072efe解决
- 第7周作业1——背包问题
- JS获取CSS属性值:getComputedStyle()
- IT和烹饪,哪个更难?(2)
- pscp -- Windows 与 Linux 之间文件传输
- gsoap 2.8.17 vc webservice
- 函数return时崩溃
- eclipse运行wordcount
- java ReadWriteLock锁
- 用gdb调试软件