题目描述
现在有一个数列{2,9,1,7,3,4,5,8,6},我和vill-v要轮流从这个数列中取出2个相邻的数,我的目标是为了让这个数列最后剩下的那个数最大,vill-v的目标是为了让最后剩下的那个数最小。
解决思路
(仅针对这道题的特化分析,想看通解的可以直接跳过)
先假设我和vill-v都是绝顶聪明的天才,可以从开始直接推到结果,那我们不难发现,我想把数变大,那我就一定会把对我最不利的两个数,也就是1和2先拿走,但1和2的位置很抽象,在9和7旁边,所以我一定会把7和9一起
去掉。vill-v也是天才,她知道了我必须这么干,所以她会把除了9,7的剩下几个数中最大的两个(即6,8),所以在我操作完两次后就会剩下{3,4,5},这是vill-v就会选择把4,5取走最后剩下答案3.
-----------------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------
通解
上面的那套显然有点太过于复杂,而且极其容易出错(主要是不知道自己算出来是不是对的)
那么好,接下来就是通解了,考虑一个数列一个长度为n(n为奇数)的数列{a1,a2,a3…………,an},我和vill-v要轮流从这个数列中取出2个相邻的数,我的目标是为了让这个数列最后剩下的那个数最大,vill-v的目标是为了让最后剩下的那个数最小。
无论我取走哪两个数,原来在奇数位上的数仍然在奇数位上,偶数位的数同理。我们设n=2k+1(其中k为正整数)则偶数位的数有k个,奇数位有k+1个,因为我和vill-v每次总是会删去一个偶数位上的数和奇数位上的数,所以最后剩下的一定是一个奇数位上的数。
好的,那么现在我们把上面数列的所有奇数位的数拉出来变成一个新数列{b1,b2,b3…………,bn},这下题目改成了,我和vill-v要从{bk}这个数组中每次取一个数出来。
接下来,分类讨论
1.当k为奇数时,显然答案就是b(k+1)/2
2.当k为偶数时,分先后手(相信天才的你一定可以想出来)
-----------------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------
好了,这道题结束了,这道题是由1%的我和99%的我同学(www.cnblogs.com/chihirofujisaki)共同完成,看他好像没有意愿发,而且这个思路真是太美妙了,所以我就写了。
做完后,我们才发现这好像是到信竞题………… 标签:偶数,数列,奇数,位上,取数,剩下,vill From: https://www.cnblogs.com/vill-v/p/18537387