题意简述
给出个正整数,AB两个人轮流取数,A先取。每次可以取任意多个数,直到N个数都被取走。每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大。在这样的情况下,最终A的得分减去B的得分为多少。(蒯的,洛谷上的)
思路
排序,,输出。
具体思路
无脑把数组排序,因为显然答案和给定数字的顺序无关。
其次根据这个推性质。(注意此时我们的已经是从小到大排好序的)。如果我在玩这个的话,那我肯定会取一段连续的出来,否则就会留下一些大的数给对手,无论如何都不划算。连续取的话,则即能保证我的最小值最大,又能保证对面的最大值最小(在取相同数量的情况下)。但是数量多少,就是我们决策的一个关键点。
关于决策:一看就知道是(因为不会做,又和决策有关,所以考虑瞎jb)。
设表示我们考虑排好序的中前个数的最优答案(就是轮流取数后的最大差值)。
那么首先我们要枚举上一个人走在了那里,设为。那么由方程:。注意,这里的先后手不是绝对的,是相对的。也就是时候,我们在考虑的时候,是先手-后手的答案,但是是后手-先手的答案。而我们要求a[j]+先手-后手,所以转移方程式应该是a[j]-dp[j-1],即a[j]-(后手-先手),即a[j]+先手-后手。
然后我们发现这转移是的。但是的值是固定的,所以我们珂以用前缀和优化来优化这个题。
然后我们发现,我们算需要用到个状态,然后需要用到个状态。其中有个状态是共有的,表达式都一样,而且值也没有改变。所以我们干脆就直接继承的答案好了,然后多把的答案给算上,求个即珂。
转移方程变为:。
实现注意
需要呢!!!
代码:
1 |
|