NASA的食物计划(洛谷)

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

猜你喜欢

转载自blog.csdn.net/weixin_46239370/article/details/108963160
今日推荐