题目
小偷来到了一个神秘的王宫,突然眼前一亮,发现5个宝贝,每个宝贝的价值都不一样,且重量也不一样,但是小偷的背包携带重量有限,所以他不得不在宝贝中做出选择,才能使偷到的财富最大,请你帮助小偷计算一下。
输入描述:
宝贝价值:6,3,5,4,6
宝贝重量:2,2,6,5,4
小偷背包容量:10
输出描述:
偷到宝贝的总价值:15
博主写的代码
```java
/*
* @author:小诺大人
* @date: 2021/6/16
*/
public class Thief {
public static void main(String[] args) {
int[] goods = {6, 3, 5, 4, 6};
int[] goodWeight = {2, 2, 6, 5, 4};
int[] result = new int[goods.length];
//获取差值
for (int i = 0; i < result.length; i++) {
result[i] = goods[i] - goodWeight[i];
}
// 根据差值从小到大排序,同时调整物品和物品重量的下标
for (int i = 0; i < result.length - 1; i++) {
for (int j = i + 1; j < result.length; j++) {
//同时调整下标对应的值位置
if (result[i] < result[j]) {
//调整 result
reArray(result, i, j);
//调整 goods
reArray(goods, i, j);
//调整 goodWeight
reArray(goodWeight, i, j);
}
}
}
int minWeight = 10; //记录s剩余物品重量的最小值
int sum = 0;
int goodsSum = 0;
for (int i = 0; i < result.length; i++) {
if ((sum + minWeight) > 10) {
System.out.println("\n偷取物品价值:" + goodsSum);
break;
}
//重新初始化目前剩余物品的最小重量
minWeight=10;
for (int j = i+1; j < goodWeight.length; j++) {
if (goodWeight[j] < minWeight) {
minWeight = goodWeight[j];
}
}
//记录当前背包重量和物品价值
sum += goodWeight[i];
goodsSum += goods[i];
//输入偷取的每个物品
System.out.print(goods[i] + " ");
}
}
private static void reArray(int[] result, int i, int j) {
int comTemp;
comTemp = result[j];
result[j] = result[i];
result[i] = comTemp;
}
}
输出:
偷取物品:6 6 3
偷取物品价值:15