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; }
相关文章推荐
- [01背包]vijos1334 NASA的食物计划
- Vijos P1334 NASA的食物计划(动态规划,二维费用的01背包)
- vijos1334 NASA的食物计划
- Vijos 1334 ---- NASA的食物计划(01背包强化)
- [luoguP1507] NASA的食物计划(DP)
- 【DP】洛谷 P1507 NASA的食物计划
- NASA的食物计划 vijos
- XYNUOJ 1418: NASA的食物计划
- 洛谷——P1507 NASA的食物计划
- vijos1334:NASA的食物计划
- AC日记——NASA的食物计划 洛谷 P1507
- Vijos1334 NASA的食物计划
- P1507 NASA的食物计划
- 洛谷P1507 NASA的食物计划
- vijos1334 NASA的食物计划(二维费用的背包问题)
- vijos1334 NASA的食物计划(二维费用的背包问题)
- XYNUOJ NASA的食物计划
- 洛谷 P1507 NASA的食物计划
- Vijos1334_NASA的食物计划
- NASA计划2069年发射飞船至半人马座阿尔法星