取数游戏 贪心

  给出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取奇位置的所有数。
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值