二维背包

 2023-09-19 阅读 15 评论 0

摘要:Description 给出一个背包,背包有体积容量C和重量限制L,再给出N个物品,每个物品有体积Vi,重量Wi,价值Pi三个参数。每个物品有且仅有一件,求用背包装物品,能获得的最大总价值是多少。 Input 文件的第一行一个数T,表示
Description

给出一个背包,背包有体积容量C和重量限制L,再给出N个物品,每个物品有体积Vi,重量Wi,价值Pi三个参数。每个物品有且仅有一件,求用背包装物品,能获得的最大总价值是多少。

Input

文件的第一行一个数T,表示测试用例子数。接下来T个测试用例。

每个测试用例第一行三个数,NCL (0 < N, C, L < 1000)。

接下来N行,每行三个数ViWiPiVi < 1.5×C, Wi < 1.5×L, Pi < 1000)分别表示物品的体积,重量,价值三个属性。

Output

为每个测试用例输出一行结果:所装物品价值的最大值。

Sample Input

背包模型?1
3 5 5
2 3 1
3 2 1
3 3 3

Sample Output

3

#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
#define NUM 1002
#define INF -66536
int v[NUM],w[NUM],p[NUM]; //分别表示物品的体积,重量,价值三个属性。
int f[NUM][NUM]; //f[v][w]
int N,C,L;//N个物品,背包C体积容量,L重量
int knapsack(){memset(f,0,sizeof(f));for(int i=0;i<N;i++){ //物品的种类for(int j=C;j>=v[i];j--){ //物品的体积for(int k=L;k>=w[i];k--) //物品的质量f[j][k]=max(f[j-v[i]][k-w[i]]+p[i],f[j][k]);}}return f[C][L];
}
int main()
{int T; //测试用例cin >> T;for(int i=1;i<=T;i++){cin >> N >> C >> L;for(int i=0; i<N; i++){cin >> v[i] >> w[i] >> p[i];}cout << knapsack()<<endl;}return 0;
}

 

转载于:https://www.cnblogs.com/dichuan/p/8243029.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/78974.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息