#背包 ——二维费用的背包问题

题目

点这里传送

思路

主要就是多了一个和 体积 类似的 重量,多了一维;

答案

#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]);
		

	*/
		
		
原文地址:https://www.cnblogs.com/yuanyulin/p/14026771.html