还记得上一篇我写的拔河的题解嘛?
上篇链接—->这里
题目描述 Description
一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,要求两个组的人数相差不能超过1,且两个组内的所有人体重加起来尽可能地接近。
输入描述 Input Description
数据的第1行是一个n,表示参加拔河比赛的总人数,n<=100,接下来的n行表示第1到第n个人的体重,每个人的体重都是整数(1<=weight<=450)。
输出描述 Output Description
包含两个整数:分别是两个组的所有人的体重和,用一个空格隔开。注意如果这两个数不相等,则请把小的放在前面输出。
样例输入 Sample Input
3
100
90
200
样例输出 Sample Output
190 200
题解:
上次我们被这个DP虐的死去活来,为这个脑洞的DP感到惊叹,但是现在,我们不用DP,就用贪心去A掉这个题,这可是对头疼DP的人的福音啊(比如说我……)。
对于一组普通序列,贪心就是在保证人数差在题目条件内的情况下尽可能的平衡两边的人数,这个贪心显然是不对的,但是他也有恰好正确的几率,对于这个题来说这个几率大约为0.1%,几率很小,但是每次贪心是ON,那么我们可不可以多次贪心取最优的呢?
答案是显然的,我们每次对序列随即排序,重排后得到一个乱序序列,然后我们对这个序列进行贪心处理,这一次得到正解的几率很小,那么我们就把重排次数扩大为100000次,进行10W次重排贪心,说不定就有一次得到了正解……这个几率有多少呢