有N种物品,每种物品的数量为C1,C2......Cn。从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi为整数)。求背包能够容纳的最大价值。
其中1 <= N <= 100,1 <= W <= 50000,1 <= Wi, Pi <= 10000, 1 <= Ci <= 200。
Input
第1行,2个整数,N和W中间用空格隔开。N为物品的种类,W为背包的容量。 第2 ~ N+1行,每行3个整数,Wi,Pi和Ci分别是物品体积、价值和数量。
Output
输出可以容纳的最大价值。
Sample Input
3 6 2 2 5 3 3 8 1 4 1Sample Output
9
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
const int N=50010;
int v,w,c;
int f[N];
int n,m;
int main(){
while(cin>>n>>m)
{ memset(f,0,sizeof(f));
for(int i=1;i<=n;i++)
{
cin>>v>>w>>c;
for(int j=1;j<=c;j++)
{
for(int k=m;k>=v*j;k--)
{
f[k]=max(f[k],f[k-v]+w);//1
}
}
}
cout<<f[m]<<endl;
}
return 0;
}

该博客介绍了如何使用动态规划解决0-1背包问题,给定有限种类的物品和背包容量,求解能装入的最大价值。程序通过读取物品体积、价值和数量,计算并输出最大价值。
1万+

被折叠的 条评论
为什么被折叠?



