Files
python/C++专题课程/背包九讲/TestProject/5_TwoDimensionPackage.cpp
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

45 lines
1.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <bits/stdc++.h>
using namespace std;
/**
* 5. 二维费用的背包
1)问题:
对于每件物品,具有两种不同的费用;
选择这件物品必须同时付出这两种代价;
对于每种代价都有一个可付出的最大值(背包容量)。
问怎样选择物品可以得到最大的价值。
第i件物品所需的两种代价分别为a[i]和b[i]。
两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。
2)输入:
测试用例数
物品数 第一个背包容量v 第二个背包容量u
第i个物品的ai bi wi
*/
#define maxV 1000
#define maxU 1000
int main(void) {
int cases, n, v, u, ai, bi, wi;
int f[maxV][maxU];
freopen("../5.txt", "r", stdin);
cin >> cases;
while (cases--) {
memset(f, 0, sizeof(f));
cin >> n >> v >> u;
for (int i = 0; i < n; i++) {
cin >> ai >> bi >> wi;
for (int j = v; j >= 0; j--) {
for (int k = u; k >= 0; k--) {
if (ai <= j && bi <= k)
f[j][k] = max(f[j][k], f[j - ai][k - bi] + wi);
}
}
}
// for (int i = 0; i <= v; i++)
// for(int j=0;j<=u;j++)
// cout << f[i][j] << " ";
// cout << endl;
cout << f[v][u] << endl;
}
}