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]; } }