开个头
package DynamicProgramig;

public class KnapsackTest{
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyObject[] objects =new MyObject[]{
			new MyObject("李子",4,9),
			new MyObject("苹果",5,11),
			new MyObject("橘子",2,5),
			new MyObject("草莓",1,2),
			new MyObject("甜瓜",6,13)
		};
		new Knapsack(objects,8);

	}
}

class Knapsack {
	public Knapsack(MyObject[] objects,int _limit){
		
		//initial fields
		limit=_limit;
		value=new int[limit+1];
		item=new int[limit+1];
		
		//proceeding
		int s,p,newvalue;
		for(int i=0;i<objects.length;i++){
			for(s=objects[i].size;s<=limit;s++){
				p=s-objects[i].size;
				newvalue=value[p]+objects[i].price;
				if(newvalue>value[s]){
					value[s]=newvalue;
					item[s]=i;
				}
			}
			//查看数组动态变化
			arrayPrint(value);
			arrayPrint(item);		
		}
		
		//print result
		System.out.println("所放物品总价值为"+value[limit]);
		for(int i=limit;i>=1;i -=objects[item[i]].size){
			System.out.printf("物品:%s\t价格:%d\n",objects[item[i]].name,objects[item[i]].price);
		}
		
	}
	private void arrayPrint(Object a){
		System.out.println(new ObjectAnalyzer().toString(a));
		
	}
	private int limit;//背包重量限制
	private int[] value;
	private int[] item;

}

class MyObject{
	//为了直观方便直接弄成public
	public MyObject(String n,int s,int p){
		name=n;
		size=s;
		price=p;
	}
	public String name;
	public int size;
	public int price;
	public boolean isput;
}

 

posted on 2013-08-13 15:08  Zolman  阅读(302)  评论(2)    收藏  举报