本文主要是介绍Elimination,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
完全背包的题目,代码实现并不难,但是要理解题意,英语是硬伤~
题意(人工翻译):
赢得其中一场淘汰赛的选手将会入围2214年的"Russian Code Cup"比赛
淘汰赛的赛制分为初赛和复赛,每场初赛都有c道问题,初赛的获胜者是排名前n位的选手,每场复赛的都有d道题目,复赛的获胜者只有一名,另外,在过去的决赛获胜的k名选手直接被邀请参加决赛而不用淘汰赛
在所有的的淘汰赛结束之后应该有不少于n*m位选手进入决赛,你应该按照这样的规则去组织淘汰赛:不少于n*m位选手去参加决赛,在所有淘汰赛中用的题目应该尽量少
n*m为背包容量,需要的题目数量作为value,比赛通过的人数作为weight,如果人数不够比赛就要一直进行下去,所以符合完全背包的特性,唯一的难点就是需要在n*m-k~n*m的范围内找一个最小值,只要通过的人数超过n*m即可,然而为什么是这个范围,首先n*m-k是下界这个不必多说,一场比赛是否被选择取决于里面每道题目的“价值”,这场比赛通过人数除以题目数量(不是取整除法),而只有两种比赛要么初赛“价值”高,要么复赛“价值”高,若初赛“价值”高,因为初赛每次通过n名选手,至少要通过n*m名选手,所以上界选取n*m,而复赛“价值”高则对应下界(所以根据这个还有另外的写法点击打开链接)
这篇关于Elimination的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!