01背包Java代码

import java.util.Scanner;

public class Application {

  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    int v = scanner.nextInt(); // 背包容量
    int numOfgoods = scanner.nextInt();
    int[] cost = new int[numOfgoods];
    int[] value = new int[numOfgoods];

    for(int i =0;i<numOfgoods;i++){
      cost[i] = scanner.nextInt(); //物品重量 eg: 2 3 4 5 1
    }
    for(int i =0;i<numOfgoods;i++){
      value[i] = scanner.nextInt(); //物品价值 eg: 5 6 3 7 2
    }
    zeroonepack(v,cost,value);
  }

  public static void zeroonepack(int v, int[] costs,int[] values){

    int[] f = new int[v+1];
    for(int i=0,items =costs.length;i< items;i++){
      for(int j=v;j>=0;j--){
        if(j>=costs[i])
          f[j] = Integer.max(f[j],f[j-costs[i]]+values[i]);
      }

    }
    System.out.print(f[v]);
  }
}
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.youkuaiyun.com/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.youkuaiyun.com/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 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值