第七周作业——背包问题
来源:互联网 发布:剑三好友招募积分算法 编辑:程序博客网 时间:2024/04/30 20:08
第一行为背包总重量15,物品数量5;第2-6行,分别为第1-5件物品的重量与价值),W=15,编程计算最终背包所装物品的编号、总重量与总价值。要求能够把构造的二维表格输出到文件KnapsackResult.txt中。
package Backpack;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 static void main(String[] args) { String path="E:/Knapsack.txt"; String resultPath="E:/KnapsackResult.txt"; Scanner sc=null; PrintWriter writer=null; try { sc=new Scanner(new File(path)); writer=new PrintWriter(new File(resultPath)); int allWeight=sc.nextInt();//背包总重量 int allNum=sc.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]=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);//求出物品编号和背包总重量 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(sc!=null) sc.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.print("最终背包中物品的编号是:"); 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); } 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; } }
0 0
- 第七周作业——背包问题
- 第七周作业——背包问题
- 第七周作业——背包问题
- 第七周作业——背包问题
- 第七周作业——背包问题
- 第七周作业——背包问题
- 第七周作业——背包问题
- 第七周作业—背包问题
- 第七周作业1——背包问题
- 《算法概论》第七周作业——背包问题
- 第七周算法概论作业—背包问题
- 第七周作业--背包问题
- 第七周作业--背包问题
- 第七周作业-背包问题
- 第七周作业--背包问题
- 第七周作业-背包问题
- 第七周作业----背包问题
- 第七周作业 背包问题
- 湘潭邀请赛——Welcome to XTCPC
- 新家入住气味难忍 除去甲醛有妙招
- dedecms织梦:feedback评论内容
- 免费无线网络成为商家营销新模式
- 设计模式之装饰模式
- 第七周作业——背包问题
- UI 指派初始化方法 视图控制器 button响应方法
- JD 1526 朋友圈(并查集 合并)
- C#使用HttpClient进行GET&POST
- 深度分析:Android4.3下MMS发送到附件为音频文件(音频为系统内置音频)的彩信给自己,添加音频-发送彩信-接收彩信-下载音频附件-预览-播放(二,发送彩信<1>)
- 关于 Swift 的一点初步看法
- 亡羊补牢,尤为迟也
- 个人理财不可忽视的几件小事
- Hibernate优化