背包问题Java代码
时间: 2024-10-11 16:05:30 浏览: 33
经典背包问题(Knapsack Problem)的Java和Python实现
在Java中,我们可以使用动态规划来解决0/1背包问题。下面是一个简单的代码示例:
```java
public class Knapsack {
public int knapSack(int W, int wt[], int val[], int n) {
int[][] K = new int[n + 1][W + 1];
// Build table K[][] in bottom up manner
for (int i = 0; i <= n; i++) {
for (int w = 0; w <= W; w++) {
if (i == 0 || w == 0)
K[i][w] = 0;
else if (wt[i - 1] <= w)
K[i][w] = Math.max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w]);
else
K[i][w] = K[i - 1][w];
}
}
return K[n][W];
}
}
```
这个`knapSack`函数接受背包容量`W`,物品重量数组`wt`,物品价值数组`val`和物品数量`n`作为参数,返回能装入的最大价值。它通过构建一个二维表格`K`来存储前缀状态的信息,并在遍历过程中决策是否选取当前物品。
对于其他类型的背包问题,如完全背包或多重背包,可能会有所不同,但基本思路类似,只是更新条件会稍有变化。
阅读全文