用Java解决以下问题:给定n种物品和一个背包,物品i的重量是Wi,价值为Vi,背包的容量是c。如何选择装入背包中的物品,使得装入背包中的物品的总价值达到最大。
时间: 2023-10-02 08:14:10 浏览: 83
给定n种物品和一个背包
5星 · 资源好评率100%
这是一个经典的动态规划问题,可以使用Java解决。我们可以定义一个二维数组dp[i][j],表示前i个物品放入容量为j的背包中所能获得的最大价值。对于每个物品i,存在两种情况:
1. 不放入背包中,此时dp[i][j] = dp[i-1][j]。
2. 放入背包中,此时dp[i][j] = dp[i-1][j-w[i]] + v[i],其中w[i]表示物品i的重量,v[i]表示物品i的价值。
因此,我们可以使用以下代码实现背包问题的解决:
```java
public static int knapsack(int[] w, int[] v, int c) {
int n = w.length;
int[][] dp = new int[n+1][c+1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= c; j++) {
if (j >= w[i-1]) {
dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-w[i-1]] + v[i-1]);
} else {
dp[i][j] = dp[i-1][j];
}
}
}
return dp[n][c];
}
```
其中,w数组和v数组分别表示物品的重量和价值,c表示背包的容量,返回值为装入背包中的物品的最大价值。
阅读全文