背包问题(动态规划)

给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大?

package 实验四;

public class 背包问题 {

	public static void main(String[] args) {
		A a=new A();
		a.init();
		a.sort();
		a.show1();
		a.Knaspack();
		a.show2();
	}

}
class Date1{
	int num;	//物品序号
	float w;		//物品重量
	float v;		//物品价值
}
class A{
	Date1 [] date=new Date1[3]; 
	int n=date.length;	//物品数量
	float C=50;			//背包负重
	float total;
	//////////////////////////////////初始化
	void init() {
		date[0]=new Date1(); date[1]=new Date1(); date[2]=new Date1();
		date[0].num=1; date[0].w=20; date[0].v=60;
		date[1].num=2; date[1].w=30; date[1].v=120;
		date[2].num=3; date[2].w=10; date[2].v=50;
	}
	////////////////////////////////排序
	void sort() {
		int i,j;
		for(i=0;i<date.length-1;i++) {
			for(j=0;j<date.length-1-i;j++) {
				Date1 t=new Date1();
				t=date[j]; date[j]=date[j+1]; date[j+1]=t;
			}
		}
	}
	void show1() {
		int i;
		System.out.print("排序后为:");
		for(i=0;i<date.length;i++) {
			System.out.print(date[i].num+" ");
		}
		System.out.println();
	}
	/////////////////////////////贪心算法
	void Knaspack() {
		int i=0,j;
		total=0;
		while(date[i].w<C) {
			total=total+date[i].v;
			C=C-date[i].w;
			i++;
		}
		total=total+C/date[i].w*date[i].v;
	}
	void show2() {
		System.out.print("total为:");
		System.out.println(total);
	}
}

猜你喜欢

转载自blog.csdn.net/abc1498880402/article/details/83662483