题目传送门:C. RationalLee
题目大意:
把n个数字分给k个朋友,每个朋友 i 的happiness是所拿到的 w[i] 个数字中最大值与最小值的和,问总的happiness最大为多少?
思路:
设最终答案为ans
每个人的happiness是所拿到的w[i]个数字中最大值与最小值之和,也就是只有最大值与最小值对ans产生了贡献,而在这之间的数对ans贡献为0,所以我们希望尽可能多的让小的数字贡献为0,大的数字尽可能做贡献,尽可能提高最小值之和。
那么就有以下几点:
- 对于w[i] = 1的朋友我们希望他能拿到尽可能大的数字,比如给他a[j],由于最大值和最小值都为a[j],这样对ans的贡献就为2 * a[j],而不是a[j]
- 分配完w[i] = 1的朋友后我们希望给其余朋友分配一个尽可能大的数字,这样能使最大值之和尽可能大
- 对于w[i]越大的朋友我们给他分配越小的w[i] - 1个数字,那么其中的w[i] - 2个数字不会成为其他朋友的最小值,那么可以使w[i]较小的朋友所拿到的最小值尽可能大
那么我们只要给a,w数组排个序就行了
我们可以用简单的例子来描述这一过程
10 4
1 2 3 4 5 6 7 8 9 10 //10个数字
4 3 2 1//4个朋友所拿到的数字个数
1.给w[i] = 1(即第四位朋友数字10)
2.分别给前三个朋友7,8,9
3.给第一个朋友1,2