0-1背包问题

  1. package com.test.clickhouse.config;
  2. /**
  3. * @author jia
  4. * @since 2022-04-13 10:39
  5. */
  6. public class Bag {
  7. public static void main(String[] args) {
  8. int dp = dp(3, 4, new int[]{2, 1, 3}, new int[]{4, 2, 3});
  9. System.out.println(dp);
  10. }
  11. public static int dp(int num, int maxW, int[] weight, int[] price) {
  12. int[][] dp = new int[num + 1][maxW + 1];
  13. for (int i = 1; i <= num; i++) {
  14. for (int j = 1; j <= maxW; j++) {
  15. // 边界处理:当前最大重量-当前物品重量=剩余载重(不能<0)
  16. if (j - weight[i - 1] < 0) {
  17. System.out.println("=============i=" + i + ",j=" + j);
  18. dp[i][j] = dp[i - 1][j];
  19. } else {
  20. System.out.println("i=" + i + ",j=" + j + ",j-weight[i-1]====" + (j - weight[i - 1]));
  21. dp[i][j] = Math.max(dp[i - 1][j - weight[i - 1]] + price[i - 1],
  22. dp[i - 1][j]);
  23. }
  24. }
  25. }
  26. return dp[num][maxW];
  27. }
  28. }