第七次算法作业

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

你可能感兴趣的:(作业)