给出一个背包,背包有体积容量C和重量限制L,再给出N个物品,每个物品有体积Vi,重量Wi,价值Pi三个参数。每个物品有且仅有一件,求用背包装物品,能获得的最大总价值是多少。
文件的第一行一个数T,表示测试用例子数。接下来T个测试用例。
每个测试用例第一行三个数,N,C,L (0 < N, C, L < 1000)。
接下来N行,每行三个数Vi,Wi,Pi(Vi < 1.5×C, Wi < 1.5×L, Pi < 1000)分别表示物品的体积,重量,价值三个属性。
为每个测试用例输出一行结果:所装物品价值的最大值。
1
3 5 5
2 3 1
3 2 1
3 3 3
3
#include<bits/stdc++.h> #define ll long long const int maxn = 1e3+10; using namespace std; int v[maxn],w[maxn],p[maxn],dp[maxn][maxn]; int main() { int t;cin>>t; while(t--){ int n,c,l; cin>>n>>c>>l; for(int i=1;i<=n;i++) cin>>v[i]>>w[i]>>p[i]; memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) for(int j=c;j>=v[i];j--) for(int k=l;k>=w[i];k--) dp[j][k]=max(dp[j][k],dp[j-v[i]][k-w[i]]+p[i]); cout<<dp[c][l]<<endl; } }
原文:https://www.cnblogs.com/JAJA-Xin/p/14085533.html