0-1背包
已知一个背包最多能容纳物体的体积为V
现有n个物品第i个物品的体积为v_i,第i个物品的重量为w_i
求当前背包最多能装多大重量的物品
解析
dp[j]表示背包体积为j的情况下,能装的最大容量是多少。由于这是0-1背包问题,一个物品只能使用一次,所以采用一维的状态转移数组时,在内循环遍历背包容量时,要采用逆序,避免同一件物品被重复使用。
public int knapsack (int V, int n, int[][] vw) { // write code here int[] dp = new int[V + 1]; dp[0] = 0; for (int i = 0; i < n; i++) { for (int j = V; j >= vw[i][0]; j--) { if (j >= vw[i][0]){ dp[j] = Math.max(dp[j],dp[j - vw[i][0]] + vw[i][1]); } } } return dp[V]; }