#143. 「Jury Compromise」 陪审团

「Jury Compromise」 陪审团

在一个遥远的国家,一名嫌疑犯是否有罪需要由陪审团来决定。

陪审团是由法官从公民中挑选的。

法官先随机挑选N个人(编号1,2…,N)作为陪审团的候选人,然后再从这N个人中按照下列方法选出M人组成陪审团。

首先,参与诉讼的控方和辩方会给所有候选人打分,分值在0到20之间。

第 i 个人的得分分别记为p[i]和d[i]。

为了公平起见,法官选出的M个人必须满足:辩方总分D和控方总分P的差的绝对值|D-P|最小。

如果选择方法不唯一,那么再从中选择辨控双方总分之和D+P最大的方案。

求最终的陪审团获得的辩方总分D、控方总分P,以及陪审团人选的编号。

注意:若陪审团的人选方案不唯一,则任意输出一组合法方案即可。

输入格式

输入包含多组测试数据。

每组测试数据第一行包含两个整数N和M。

接下来N行,每行包含两个整数p[i]和d[i]。

每组测试数据之间隔一个空行。

当输入数据N=0,M=0时,表示结束输入,该数据无需处理。

输出格式

对于每组数据,第一行输出’Jury #C’,C为数据编号,从1开始。

第二行输出“Best jury has value P for prosecution and value D for defence:”,P为控方总分,D为辩方总分。

第三行输出按升序排列的陪审人选编号,每个编号前输出一个空格。

每组数据输出完后,输出一个空行。

数据范围

1N2001 \le N \le 200,
1M201 \le M \le 20
0 \le p\[i\], d\[i\] \le 20

输入样例:

4 2
1 2
2 3
4 1
6 2
0 0

输出样例:

Jury #1
Best jury has value 6 for prosecution and value 4 for defence:
 2 3

来源

  • 《算法竞赛进阶指南》
  • acwing 可能含有视频讲解