动态规划解决01背包问题

import java.util.Arrays;

public class ZeroOneKnapsack {
    public static void main(String[] args) {
        int[] weight = {1, 3, 4};
        int[] value = {15, 20, 30};

        int bag_room = 4;
        int[][] dp = new int[weight.length][bag_room+1];

        for(int j = weight[0]; j < bag_room+1; j++){
            dp[0][j] = value[0];
        }
        for(int i = 1; i < weight.length; i++){
            for(int j = 0; j < bag_room+1; j++){
                if(weight[i] > j){
                    dp[i][j] = dp[i-1][j];
                }
                else{
                    dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i]);
                }
            }
        }

        for(int i = 0; i < dp.length; i++){
            System.out.println(Arrays.toString(dp[i]));
        }
        System.out.println(dp[2][bag_room]);
    }
}


dp数组

        int[] weight = {1, 3, 4};
        int[] value = {15, 20, 30};
[0, 15, 15, 15, 15]
[0, 15, 15, 20, 35]
[0, 15, 15, 20, 35]
35

dp数组

      int[] weight = {3, 4, 1};
      int[] value = {20, 30, 15};
[0, 0, 0, 20, 20]
[0, 0, 0, 20, 30]
[0, 15, 15, 20, 35]
35

dp数组

        int[] weight = {4, 3, 1};
        int[] value = {30, 20, 15};
[0, 0, 0, 0, 30]
[0, 0, 0, 20, 30]
[0, 15, 15, 20, 35]
35