📜  算法测验| SP竞赛4 |问题4(1)

📅  最后修改于: 2023-12-03 15:11:33.305000             🧑  作者: Mango

算法测验 | SP竞赛4 | 问题4

这是一道来自 SP竞赛(SPC)第四场的问题,需要使用贪心算法进行解题。它的详细描述如下:

问题描述

现在有 $n$ 个人要参加一个活动,每个人的体重为 $w_i$。他们需要坐上一架飞机前往目的地,这架飞机最大载重量为 $m$。

由于这架飞机的特殊设计,每次只能坐两个人,所以他们需要两个人一组,每组的总重量不得超过 $m$。他们需要按最大可能的总体重进行分组,请你计算最大的可能的分组总体重。

输入格式

输入共 $n+1$ 行,第一行为两个整数 $n,m$,表示人数和飞机的最大载重量。

接下来 $n$ 行,第 $i$ 行为 $w_i$,表示第 $i$ 个人的体重。

输出格式

输出一行一个整数,表示最大的可能的分组总体重。

输入样例
4 4
1
2
3
4
输出样例
6
算法思路

这个问题很明显可以使用贪心算法解决。我们首先将人按体重从小到大排序,然后同时按头尾两个指针遍历整个序列。

如果头尾指针的体重总和小于等于飞机载重,就将这两个人分为一组,否则将头指针向右移动。

我们可以证明这个做法是正确的。首先,我们可以将最轻和最重的两个人放在一组,如果这样总体重已经达到了最大可能值,那么这个方案就是正确的。

否则,我们考虑从轻到重依次往后挑选每一个人 $i$,然后在剩余的人中选择一个体重最重的人 $j$,让它们组成一组。这样做的证明可以通过数学归纳法进行。

代码实现

根据上述算法思路,我们可以很容易地完成这个问题。

下面是这个问题的 AC 代码: