实现贪心法解决背包问题的算法用java代码
时间: 2024-10-17 13:10:30 浏览: 23
用贪心算法实现背包问题
5星 · 资源好评率100%
贪心法通常用于解决背包问题的一种策略,它不是所有背包问题的最佳解决方案,但在某些特定条件下可以得到局部最优解。以下是使用Java实现的一个简单版本的0-1背包问题(每个物品只能取一次)的贪心算法:
```java
import java.util.Arrays;
class Item implements Comparable<Item> {
int weight;
int value;
public Item(int weight, int value) {
this.weight = weight;
this.value = value;
}
@Override
public int compareTo(Item other) {
return Integer.compare(other.value / other.weight, value / weight);
}
}
public class GreedyKnapsack {
public static int greedyKnapsack(int W, Item[] items) {
Arrays.sort(items); // 按价值重量比降序排序
int totalValue = 0;
for (Item item : items) {
if (W >= item.weight && totalValue + item.value <= W) { // 如果剩余空间足够并且增加价值不会超过总容量
W -= item.weight; // 使用物品
totalValue += item.value;
} else if (totalValue + item.value > W) { // 否则只选能装下的部分
totalValue += W - item.weight;
break;
}
}
return totalValue;
}
public static void main(String[] args) {
int capacity = 50;
Item[] items = {new Item(10, 60), new Item(20, 100), new Item(30, 120)};
System.out.println(greedyKnapsack(capacity, items));
}
}
```
在这个例子中,我们首先按照价值与重量的比率对物品排序,然后依次选择价值最高的物品,直到达到背包的容量为止。
阅读全文