题目背景
NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,
因此在各方压力下终止了航天飞机的历史,但是此类事情会不会在以后发生,谁也无法保证,
在遇到这类航天问题时,解决方法也许只能让航天员出仓维修,但是多次的维修会消耗航天员大量的能量,
因此NASA便想设计一种食品方案,让体积和承重有限的条件下多装载一些高卡路里的食物。
题目描述
航天飞机的体积有限,当然如果载过重的物品,燃料会浪费很多钱,每件食品都有各自的体积、质量以及所含卡路里,
在告诉你体积和质量的最大值的情况下,请输出能达到的食品方案所含卡路里的最大值,当然每个食品只能使用一次.
输入格式
第一行: 两个数 体积最大值 (<400) 和质量最大值 (<400)
第二行: 一个数 食品总数 N (<50).
第三行 ~ 第3+N行:每行三个数, 体积 (<400) 质量 (<400) 所含卡路里 (<500)
输出格式
一个数:所能达到的最大卡路里 (int范围内)
题解
二维费用的01背包(空间优化):
#include <iostream>
using namespace std;
const int N = 55, M = 510;
int n, V1, V2;
int v1[N], v2[N], w[N], f[M][M];
int main()
{
cin >> V1 >> V2 >> n;
for (int i = 1; i <= n; i ++) cin >> v1[i] >> v2[i] >> w[i];
for (int i = 1; i <= n; i ++)
for (int j = V1; j >= v1[i]; j --)
for (int k = V2; k >= v2[i]; k --)
f[j][k] = max(f[j][k], f[j - v1[i]][k - v2[i]] + w[i]);
cout << f[V1][V2] << endl;
return 0;
}