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