第7周作业1——背包问题

 背包问题。对上文中提到的背包问题提供的表1(数据文件下载Knapsack.txt,第一行为背包总重量15,物品数量5;

第2-6行,分别为第1-5件物品的重量与价值),W=15,编程计算最终背包所装物品的编号、总重量与总价值。

要求能够把构造的二维表格输出到文件KnapsackResult.txt中。

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(j0;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);  
    }  
}  

第7周作业1——背包问题_第1张图片

你可能感兴趣的:(第7周作业1——背包问题)