0-1背包问题(Java,输入输出文件)

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

//0-1背包问题
public class Knapsack {
	int n;//物品的个数n
	int weight[];//物品的质量
	int value[];//物品的价值
	int maxweight;//背包的质量
	int result;//背包物品的最大总价值
	public static void main(String[] args) {
		Knapsack ks = new Knapsack();//程序入口函数,创建类的对象并调用方法
		ks.iostream();
	}
	public void iostream(){
		try {
			FileWriter fw = new FileWriter("output.txt");//输出的数据文件
			for(int m=0;m<6;m++){//依次读取6个数据文件
			Scanner in = new Scanner(new BufferedInputStream(new FileInputStream("input_assign01_0"+ m +".dat")));//输入的数据文件
			n = in.nextInt();//读取数据文件中物品的个数
			maxweight = in.nextInt();//读取数据文件中背包的质量
			weight=new int[n];
			value=new int[n];
			for(int i=0;ij){//若物品i的质量大于背包的质量,那么i肯定不在背包中
					maxvalue[i][j] = maxvalue[i-1][j];
				}
				else{
					if(maxvalue[i-1][j - weight[i-1]] + value[i-1]>maxvalue[i-1][j]){//物品i在背包中,那么前i-1个物品的总质量一定小于等于maxvalue-weight[i]
					   maxvalue[i][j] = maxvalue[i-1][j - weight[i-1]] + value[i-1];
					}
					else{//若物品i的质量小于背包质量且i不在背包中,那么前i个物品的最优解必然与前i-1个的最优解相同
					   maxvalue[i][j] = maxvalue[i-1][j];						
					}
				}
			}
		}
		return maxvalue[n][maxweight];//返回背包物品的最大总价值
	}
 
}

你可能感兴趣的:(0-1背包问题(Java,输入输出文件))