1. 程式人生 > 實用技巧 >演算法設計例題:二維揹包

演算法設計例題:二維揹包

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<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; } }