可以自己换物品价值排行
物品
package com.richard.greedy;
/**
* 物品
*/
public class Goods {
String name;
double weight;
double price;
double value;
public Goods(String name, double weight, double price) {
this.name = name;
this.weight = weight;
this.price = price;
this.value = price/weight;
}
}
部分背包问题
package com.richard.greedy;
/**
* 贪心算法----部分背包问题
*/
public class Bag1 {
double max = 0;
public void take(Goods[] glist) {
// 对物品按照价值排序从高到低
Goods[] glist2 = sortGoods(glist);
double sum_w = 0;
//取出价值最高的
for (int i=0; i<glist2.length; i++) {
sum_w += glist2[i].weight;
if (sum_w <= max) {
System.out.println(glist2[i].name+"取"+glist2[i].weight+"kg");
} else {
System.out.println(glist2[i].name+"取"+(max-(sum_w-glist2[i].weight))+"kg");
return ;
}
}
}
// 按物品的每kg 价值排序 由高到低 price/weight
public Goods[] sortGoods(Goods[] goods) {
return goods;
}
public static void main(String[] args) {
Bag1 bag1 = new Bag1();
Goods goods1 = new Goods("A",10,60);
Goods goods2 = new Goods("B",20,100);
Goods goods3 = new Goods("C",30,120);
Goods[] glist = {goods1,goods2,goods3};
bag1.max = 50;
bag1.take(glist);
}
}
运行截图