Fujiyama Thursday

题目连接: Fujiyama Thursday

大致题意:

有n辆车, 4 * n个人, 1车上4个人, 每个车的车速不同, 每个人的吃饭速度也不同, 一辆车的四个人以吃饭最慢的那个人为准. 希望你平衡时间, 输出最长花费时间.

解题思路:

贪心, 模拟即可. 最快的车上吃饭最慢的人, 最慢的车上吃饭最快的人.

AC代码:

#include 
typedef long long ll;
using namespace std;
int c[55], e[55]; //车的花费, 车上人吃东西的花费
int cost[4 * 55]; //所有人吃东西的花费
int main(void)
{
	int T; cin >> T;
	for (int t = 1; t <= T; ++t) {
		int n; scanf("%d", &n);
		for (int i = 1; i <= n; ++i) {
			scanf("%d", &c[i]);
		}
		for (int i = 1; i <= 4 * n; ++i) {
			scanf("%d", &cost[i]);
		}
		sort(cost + 1, cost + 1 + 4 * n);
		for (int i = 1; i <= n; ++i) {
			e[i] = *max_element(cost + 1 + (i - 1) * 4, cost + 1 + i * 4); //每4个选出一个最大值
		}
		sort(c + 1, c + 1 + n); sort(e + 1, e + 1 + n, greater<>()); //c和e一个小到大, 一个大到小
		for (int i = 1; i <= n; ++i) c[i] += e[i]; //总花费时间累计到一个数组上(也可以再开一个新的)
		const int res = *max_element(c + 1, c + 1 + n); //得到最大值
		printf("Trip #%d: %d\n", t, res);
	}
	return 0;
}

END

你可能感兴趣的:(贪心算法题目)