题目背景 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; }