您的位置:首页 > 其它

xynu NASA的食物计划(01背包)

2018-03-08 19:23 316 查看

问题 B: NASA的食物计划

时间限制: 1 Sec  内存限制: 128 MB
提交: 8  解决: 8
[提交][状态][讨论版]

题目描述

       航天飞机的体积有限,当然如果载过重的物品,燃料会浪费很多钱,每件食品都有各自的体积、质量以及所含卡路里,在告诉你体积和质量的最大值的情况下,请输出能达到的食品方案所含卡路里的最大值,当然每个食品只能使用一次.

输入

第一行两个数体积最大值(<400)和质量最大值(<400)
第二行 一个数 食品总数N(<50).
第三行-第3+N行
每行三个数 体积(<400) 质量(<400) 所含卡路里(<500)

输出

一个数 所能达到的最大卡路里(int范围内)

样例输入

320 3504160 40 12080 110 240220 70 31040 400 22

样例输出

550
刚开始写成了这样,结果是错的for(int i=1;i<=n;i++)
for(int j=t,k=w;j>=a[i]&&k>=b[i];j--,k--)
dp[j][k]=max(dp[j][k],dp[j-a[i]][k-b[i]]+c[i]);改正:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[400][400];
int a[55],b[55],c[55];
int t,w;
void Dp(int n){
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
for(int j=t;j>=0;j--)
for(int k=w;k>=0;k--)
if(j>=a[i]&&k>=b[i])	dp[j][k]=max(dp[j][k],dp[j-a[i]][k-b[i]]+c[i]);
}
int main()
{
int n;
scanf("%d%d",&t,&w);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d%d",&a[i],&b[i],&c[i]);
Dp(n);
printf("%d\n",dp[t][w]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: