0-1背包问题蛮力法求解(java版本)
时间: 2023-10-22 13:32:33 浏览: 196
蛮力法解决0-1背包问题
5星 · 资源好评率100%
好的,这是0-1背包问题的蛮力法(Brute Force)求解的Java代码:
```java
public class KnapsackBruteForce {
public static int knapsack(int W, int wt[], int val[], int n) {
// 如果没有物品或背包容量为0,则价值为0
if (n == 0 || W == 0) {
return 0;
}
// 如果当前物品重量大于背包容量,则跳过该物品
if (wt[n-1] > W) {
return knapsack(W, wt, val, n-1);
}
// 否则,返回包括该物品和不包括该物品的最大价值
else {
return Math.max(val[n-1] + knapsack(W-wt[n-1], wt, val, n-1),
knapsack(W, wt, val, n-1));
}
}
public static void main(String args[]) {
int val[] = new int[]{60, 100, 120};
int wt[] = new int[]{10, 20, 30};
int W = 50;
int n = val.length;
System.out.println(knapsack(W, wt, val, n));
}
}
```
这里的`knapsack`方法是递归地求解0-1背包问题的最大价值。第一个参数`W`表示背包的容量,`wt`和`val`分别表示物品的重量和价值,`n`表示物品的数量。如果当前物品的重量大于背包容量,则直接跳过该物品;否则,分别考虑包括该物品和不包括该物品两种情况下的最大价值,并返回其中较大的一个。在求解的过程中,使用了递归的思想,每次考虑一个物品是否加入背包。时间复杂度是$O(2^n)$,因为每个物品都有两种情况:加入或不加入背包。
阅读全文