用Java实现金银岛贪心算法
时间: 2023-11-05 21:17:26 浏览: 151
金银岛问题是一个经典的贪心算法问题,主要思路是从当前状态出发,每次选择价值最大(或最小)的物品加入集合中,直到不能再加入物品为止。下面是使用Java实现的金银岛贪心算法示例代码:
```java
import java.util.Arrays;
public class GreedyAlgorithm {
public static void main(String[] args) {
int[] weights = {2, 3, 4, 5, 6};
int[] values = {3, 4, 5, 6, 7};
int capacity = 10;
int maxValue = getMaxValue(weights, values, capacity);
System.out.println("The maximum value that can be obtained is: " + maxValue);
}
public static int getMaxValue(int[] weights, int[] values, int capacity) {
int n = weights.length;
double[] ratio = new double[n];
for (int i = 0; i < n; i++) {
ratio[i] = (double) values[i] / weights[i];
}
int[] index = new int[n];
for (int i = 0; i < n; i++) {
index[i] = i;
}
Arrays.sort(index, (a, b) -> Double.compare(ratio[b], ratio[a]));
int maxValue = 0;
for (int i = 0; i < n; i++) {
int j = index[i];
if (weights[j] <= capacity) {
maxValue += values[j];
capacity -= weights[j];
} else {
maxValue += ratio[j] * capacity;
break;
}
}
return maxValue;
}
}
```
在这个示例代码中,我们假设有5件物品,它们的重量和价值分别为 `weights` 和 `values`,我们要从中选择一些物品放入容量为 `capacity` 的背包中,使得背包中物品的总价值最大。首先,我们计算每个物品的性价比 `ratio`,并将物品的下标存储在 `index` 数组中,以便我们可以根据性价比对物品进行排序。然后,我们从性价比最高的物品开始,将它加入背包中,直到不能再加入新的物品为止。具体实现细节请参考代码注释。
阅读全文