Problem Description
你现在拿到了许多的礼物,你要把这些礼物放进袋子里。你只有一个最多装下V体积物品的袋子。你不能全部放进去。你也拿不动这么重的东西。你估计你能拿的最大重量为G。现在你了解了每一个物品的完美值、重量和体积,你当然想让袋子里装的物品的完美值总和最大,你又得计划一下了。
Input
输入有多组数据,每组数据的首行为V和G表示最大重量和体积,第2行为N表示拿到N件礼物,第3到N+2行每行3个数Ti、Vi、Gi表示各礼物的完美值、重量和体积(N,V,G,Ti,Vi,Gi<=380)。
Output
对于每组数据输出一个数,表示可能获得的最大完美值。
Sample Input
6 5 4 10 2 2 20 3 2 40 4 3 30 3 3
Sample Output
50
//关键字: 01背包
//标程:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int dp[500][500]; int main() { // freopen("a.txt","r",stdin); int max_volume,max_weight,i,j,k; while(cin >> max_weight >> max_volume) { memset(dp,0,sizeof(dp)); int num, value, weight, volume; cin >> num; for(i = 0; i < num; i ++) { cin >> value >> weight >> volume; for(j = max_weight; j >= weight; j --) for(k = max_volume ; k >= volume; k --) if(dp[j][k] < dp[j-weight][k-volume] + value) dp[j][k] = dp[j-weight][k-volume] + value; } cout << dp[max_weight][max_volume] << endl; } return 0; }