1418: NASA的食物计划
时间限制: 1 Sec 内存限制: 128 MB提交: 12 解决: 10
[ 提交][ 状态][ 讨论版]
题目描述
航天飞机的体积有限,当然如果载过重的物品,燃料会浪费很多钱,每件食品都有各自的体积、质量以及所含卡路里,在告诉你体积和质量的最大值的情况下,请输出能达到的食品方案所含卡路里的最大值,当然每个食品只能使用一次.
输入
第一行两个数体积最大值(<400)和质量最大值(<400)
第二行 一个数 食品总数N(<50).
第三行-第3+N行
每行三个数 体积(<400) 质量(<400) 所含卡路里(<500)
输出
一个数 所能达到的最大卡路里(int范围内)
样例输入
320 3504160 40 12080 110 240220 70 31040 400 22
样例输出
550
提示
来源
01背包问题,只不过多了一维,一维背包可参见http://mp.csdn.net/postedit/79590257
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int dp[410][410];//表示i体积 j质量时背包所含的最大的卡路里
struct Node{
int v,m,c;
}a[60];
int main(){
int V,M,N,v,m,c;
while(scanf("%d %d",&V,&M)!=EOF){
scanf("%d",&N);
memset(dp,0,sizeof(dp));
for(int i=0;i<N;i++){
scanf("%d %d %d",&a[i].v,&a[i].m,&a[i].c);
}
for(int i=0;i<N;i++){
for(int j=V;j>=a[i].v;j--){
for(int k=M;k>=a[i].m;k--){
dp[j][k]=max(dp[j][k],dp[j-a[i].v][k-a[i].m]+a[i].c);
}
}
}
printf("%d\n",dp[V][M]);
}
return 0;
}