给出2*n(n<=100)个自然数(数小于等于30000)。游戏双方分别为A方(计算机方)和B方(对奕的人)。只允许从数列两头取数。A先取,然后双方依次轮流取数。取完时,谁取得的数字总和最大为取胜方;双方和相等,属于A胜。试问A方可否有必胜的策略?、
[输入格式] 键盘输入n及2*n个自然数。
[输出格式] 共3*n+2行,其中前3*n行为游戏经过。每3行分别为A方所取的数和B方所取的数,及B方取数前应给予的适当提示,让游戏者选择取哪一头的数(L/R—左端或右端)。最后2行分别为A方取得的数和和B方取得的数和。
[举例]设n=4,自然数列为:7 9 3 6 4 2 5 3, 我们演示一下这个游戏。
算法分析:我们设计一种原始的贪心策略,让A每次取数列两头较大的那个数,则游戏者也不会傻,他也会这么干,所以在上面的数列中,A方会顺序取7、3、4、5,B方会顺序取9、6、2、3,由此得出: A方取得的数和为7+3+4+5=19,B方取得的数和为9+6+2+3=20,按照规则,判定A方输。
其实,如果按上述贪心策略去游戏,成败取决于给你的测试数据!不过,虽然A方败给B方,但是我们却发现了一个有趣的事实:A方取走偶位置的数后,剩下两端数都处于奇位置;反之,若A方取走奇位置的数后,剩下两端数都处于偶位置。即无论B方如何取法,A方即可以取走奇位置的所有数,亦可以取走偶位置的所有数。由此萌发出另一种有效的贪心策略:若能够让A方取走“数和较大的奇(或偶)位置上的所有数”,则A方必胜。
这样,取数问题便对应于一个简单问题:让A方取奇偶位置中数和较大的一半数。设j为A取数的奇偶位置标志,则j=0表示偶位置数和较大,A取偶位置上的所有数;j=1表示奇位置数和较大,A取奇位置的所有数。