01背包java代码
时间: 2023-10-19 10:05:53 浏览: 44
01背包问题是一个经典的动态规划问题,可以使用Java代码进行求解。以下是一种常见的01背包问题的Java代码实现:
```java
public class Knapsack {
public static int knapSack(int W, int wt[], int val[], int n) {
int[][] dp = new int[n + 1][W + 1];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= W; j++) {
if (i == 0 || j == 0) {
dp[i][j = 0;
} else if (wt[i - 1 <= j) {
dp[i][j = Math.max(val[i - 1 + dp[i - 1][j - wt[i - 1]], dp[i - 1][j]);
} else {
dp[i][j = dp[i - 1][j];
}
}
}
return dp[n][W];
}
public static void main(String[] args) {
int val[] = {60, 100, 120};
int wt[] = {10, 20, 30};
int W = 50;
int n = val.length;
System.out.println("最大价值为:" + knapSack(W, wt, val, n));
}
}
```
这段代码使用动态规划的思想,通过创建一个二维数组dp来保存状态转移的结果。其中dp[i][j]表示在前i个物品中选择,背包容量为j时的最大价值。通过两层循环遍历物品和背包的容量,根据状态转移方程进行计算,最终得出最大价值。以上给出的是一个简单的01背包问题的例子,你可以根据实际情况修改wt[]、val[]、W和n的值来求解不同的01背包问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Java背包问题求解实例代码](https://download.csdn.net/download/weixin_38641561/12771086)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [Java——01背包、完全背包](https://blog.csdn.net/a1013606506/article/details/79977791)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]