题目
思路
主要就是多了一个和 体积 类似的 重量,多了一维;
答案
#include<bits/stdc++.h>
using namespace std;
const int n = 1010;
int m[n], v[n], w[n], f[n][n], N, V, M;
int main(){
cin >> N >> V >> M;
for(int i = 1; i <= N; i ++)
cin >> v[i] >> m[i] >> w[i];
for(int i = 1; i <= N; i ++)
for(int j = V; j >= v[i]; j --)
for(int k = M; k >= m[i]; k --)
f[j][k] = max (f[j][k], f[j - v[i]][k - m[i]] + w[i]);
cout << f[V][M];
return 0;
}
/*+
f[i][j][k] 表示从第一个物品到第 i 个物品, 体积不超过 j ,总重量不超过 k 的价值;最大
状态转移 : 选 或 不选
for(int i = 1; i <= n; i ++)
for(int j = 0; j <= V; j ++)
for(int k = 0; k <= M;k ++){
f[i][j][k] = f[i - 1][j][k];
if( j >= v[i] && k >= w[i]) f[i][j][k] = max (f[i][j][k], f[i - 1][j - v[i]][k - m[i]] + w[i]);
*/