
dp[i][j] 表示当背包体积为 i,重量为 j 时能获得的最大总价值。对于每个物品 i,从背包容量和重量的最大值开始,倒序循环更新 dp 数组。更新公式为:dp[j][k] = max(dp[j][k], dp[j-v[i]][k-w[i]] + p[i]),即在放入当前物品和不放入当前物品两种情况中选择价值最大的方案。
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
in