第七周作业——背包问题
来源:互联网 发布:滴滴服务分刷分软件 编辑:程序博客网 时间:2024/05/18 01:46
import java.io.*; import java.util.Scanner; public class Aa { private int[] v;//存储物品的价值 private int[] w;//存储物品的重量 private int weight;//背包容纳重量 private int num;//物品数量 private int fValue[][];//fValue[i][j]存储前i个物品的重量为j的最大价值 public Aa(int weight,int num){ this.num=num; this.weight=weight; this.v=new int[num]; this.w=new int[num]; this.fValue=new int[num+1][weight+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="F://Knapsack.txt"; String resultPath="F://KnapsackResult.txt"; Scanner in=null; PrintWriter writer=null; try { in=new Scanner(new File(path)); writer=new PrintWriter(new File(resultPath)); int weight=in.nextInt();//背包总重量 int num=in.nextInt();//物品数量 Aa aa= new Aa(weight,num);//初始化背包 int[] v=aa.getV(); int[] w=aa.getW(); int[][] fvalue=aa.getfValue(); int i=1; for(i=1;i<=num;i++){//初始化物品价值数组和重量数组 w[i-1]=in.nextInt(); v[i-1]=in.nextInt(); } for(i=1;i<=weight;i++){ fvalue[0][i]=0; } for(i=1;i<=num;i++){ fvalue[i][0]=0; } for(i=1;i<=num;i++){ for(int j=1;j<=weight;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[num][weight]); aa.back(v, w, fvalue, weight, num);//求出物品编号和背包总重量 System.out.println("构造的二维表格输出结果:"); for(i=1;i<=num;i++){ for(int j=1;j<=weight;j++){ System.out.print(fvalue[i][j]+" "); writer.print(fvalue[i][j]+" "); } System.out.println(); writer.println(); } } catch (Exception e) { e.printStackTrace(); }finally{ if(in!=null) in.close(); if(writer!=null) writer.close(); } } public void back(int[] v,int[] w,int[][] fvalue,int weight,int num){ int wupinNo[]=new int[num+1]; int j=weight; for(int i=num;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<=num;i++){ if(wupinNo[i]==1){ System.out.print(i+" "); sumWeight+=w[i-1]; } } System.out.println(); System.out.println("背包的总重量是:"+sumWeight); } }
0 0
- 第七周作业——背包问题
- 第七周作业——背包问题
- 第七周作业——背包问题
- 第七周作业——背包问题
- 第七周作业——背包问题
- 第七周作业——背包问题
- 第七周作业——背包问题
- 第七周作业—背包问题
- 第七周作业1——背包问题
- 《算法概论》第七周作业——背包问题
- 第七周算法概论作业—背包问题
- 第七周作业--背包问题
- 第七周作业--背包问题
- 第七周作业-背包问题
- 第七周作业--背包问题
- 第七周作业-背包问题
- 第七周作业----背包问题
- 第七周作业 背包问题
- QT版AVRDUDE GUI(序)
- 浅谈装箱问题
- 深入浅出 - Android系统移植与平台开发(十二)- Android JNI机制
- 静态变量与实例变量的区别
- 冒泡排序的改进:一次同时冒一个大泡,一个小泡
- 第七周作业——背包问题
- ASP.NET 中 POST 数据并跳转页面(译自 Redirect and POST in ASP.NET)
- oj(二)k
- 夏季忌发怒 适当午休抗疲劳
- 理解Camera简单架构001
- 解决FPGA无法下载程序的问题
- Kalman滤波原理
- lua的弱弱引用表
- Struts2源代码解读之Action调用