import java.util.*;
public class Solution {
// 定义物品类
public class Goods {
int v; // 体积
int w; // 重量
}
public int knapsack (int V, int n, int[][] vw) {
// 初始化物品列表
List<Goods> list = new ArrayList<>();
for (int i = 0; i < vw.length; i++) {
Goods goods = new Goods();
goods.v = vw[i][0];
goods.w = vw[i][1];
list.add(goods);
}
// 初始化动态规划矩阵
int[][] dp = new int[n+1][V+1];
// 将矩阵第一行和第一列填充为0,但默认值已为0.故略
// 动态规划填充矩阵
for (int i = 1; i <= n; i++) {
// 获取当前待规划物品的信息
Goods curGoods = list.get(i-1);
for (int j = 1; j <= V; j++) {
// 容量不足时
if (j < curGoods.v) {
dp[i][j] = dp[i-1][j];
} else {
// 容量充足时,是否添加当前物品,视情况择优而定
dp[i][j] = Math.max(
dp[i-1][j],
dp[i-1][j-curGoods.v] + curGoods.w
);
}
}
} // 矩阵填充完毕
// 返回结果
return dp[n][V];
}
}