题目大意:n个人分配给3个部门,每个人分配到这3个部门的价值分别是a、b、c,且不允许出现一个部门超过n/2人,请问最大价值和是多少?
题目描述
小 L 不希望某一个部门的新成员数量过多。具体地,他要求在分配方案中,不存在一个部门被分配多于 $\frac{n}{2}$ 个新成员。你需要帮助小 L 求出,满足他要求的分配方案的满意度的最大值。
输入格式
接下来依次输入每组测试数据,对于每组测试数据:
– 第一行包含一个正整数 $n$,表示新成员的数量。
– 第 $i+1$ ($1 \leq i \leq n$) 行包含三个非负整数 $a_{i,1}, a_{i,2}, a_{i,3}$,分别表示第 $i$ 个新成员对第 $1,2,3$ 个部门的满意度。
输出格式
说明/提示
对于第一组测试数据,可以将四个新成员分别分配到第 $1,3,1,2$ 个部门,则三个部门的新成员数量分别为 $2,1,1$,均不超过 $\frac{4}{2} = 2$,满意度为 $4 + 4 + 5 + 5 = 18$。
对于第二组测试数据,可以将四个新成员分别分配到第 $1,1,2,2$ 个部门,则三个部门的新成员数量分别为 $2,2,0$,均不超过 $\frac{4}{2} = 2$,满意度为 $0 + 0 + 2 + 2 = 4$。
对于第三组测试数据,可以将两个新成员分别分配到第 $2,1$ 个部门,则三个部门的新成员数量分别为 $1,1,0$,均不超过 $\frac{2}{2} = 1$,满意度为 $9 + 4 = 13$。
### 【样例 2】
见选手目录下的 $\textbf{\textit{club/club2.in}}$ 与 $\textbf{\textit{club/club2.ans}}$。
该样例满足测试点 $3,4$ 的约束条件。
### 【样例 3】
见选手目录下的 $\textbf{\textit{club/club3.in}}$ 与 $\textbf{\textit{club/club3.ans}}$。
该样例满足测试点 $5 \sim 8$ 的约束条件。
### 【样例 4】
见选手目录下的 $\textbf{\textit{club/club4.in}}$ 与 $\textbf{\textit{club/club4.ans}}$。
该样例满足测试点 $9$ 的约束条件。
### 【样例 5】
见选手目录下的 $\textbf{\textit{club/club5.in}}$ 与 $\textbf{\textit{club/club5.ans}}$。
该样例满足测试点 $15,16$ 的约束条件。
### 【数据范围】
对于所有测试数据,保证:
– $1 \leq t \leq 5$;
– $2 \leq n \leq 10^5$,且 $n$ 为偶数;
– 对于所有 $1 \leq i \leq n$,$1 \leq j \leq 3$,均有 $0 \leq a_{i,j} \leq 2 \times 10^4$。
::cute-table{tuack}
| 测试点编号 | $n=$ | 特殊性质 |
| :–: | :–: | :–: |
| $1$ | $2$ | 无 |
| $2$ | $4$ | ^ |
| $3, 4$ | $10$ | ^ |
| $5 \sim 8$ | $30$ | ^ |
| $9$ | $200$ | B |
| $10, 11$ | ^ | 无 |
| $12$ | $10^5$ | A |
| $13, 14$ | ^ | B |
| $15, 16$ | ^ | C |
| $17 \sim 20$ | ^ | 无 |
特殊性质 A:对于所有 $1 \leq i \leq n$,均有 $a_{i,2} = a_{i,3} = 0$。
特殊性质 B:对于所有 $1 \leq i \leq n$,均有 $a_{i,3} = 0$。
特殊性质 C:对于所有 $1 \leq i \leq n$,$1 \leq j \leq 3$,$a_{i,j}$ 均在 $[0, 2 \times 10^4]$ 中独立均匀随机生成。
解题思路
根据特殊性质3的引导,使用贪心算法:每次分配的价值最大的部门。因为随机数据,所以大概率不会出现某个部门超过n/2人的情况。
如果出现这个情况怎么办呢?仅一个部门超出人数限制,我们可以减少这个部门的人数,再次贪心选择价值损失最小的替换即可——换成次大值部门,损失小的优先换。
程序实现

原来是这样用的 😉