二维背包模板**8. 二维费用的背包问题-dp练习赛

有 N 件物品和一个容量是 V 的背包,背包能承受的最大重量是 M。

每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi

求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。
输出最大价值。

输入格式

第一行两个整数,NV,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。

接下来有 行,每行三个整数 vi,mi,wi用空格隔开,分别表示第 i 件物品的体积、重量和价值。

输出格式

输出一个整数,表示最大价值。

数据范围

0<N10000<N≤1000
0<V,M1000<V,M≤100
0<vi,mi1000<vi,mi≤100
0<wi10000<wi≤1000

输入样例

4 5 6
1 2 3
2 4 4
3 4 5
4 5 6

 

输出样例:

8

 

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int v[1005],a[1005],b[1005],n,m,u,f[1005][1005];
 5 int main(){
 6     scanf("%d%d%d",&n,&m,&u);
 7     for(int i=1;i<=n;i++){
 8         scanf("%d%d%d",&a[i],&b[i],&v[i]);
 9         for(int j=m;j>=a[i];j--){
10             for(int k=u;k>=b[i];k--){
11                 f[j][k]=max(f[j][k],f[j-a[i]][k-b[i]]+v[i]);
12             }
13         }
14     }
15     printf("%d\n",f[m][u]);
16     return 0;
17 } 
View Code

 





posted @ 2020-10-26 23:19  莳曳  阅读(97)  评论(0)    收藏  举报