JAVA算法:取石子游戏(博弈)
题目大意是:Alex和Lee用一堆石头玩游戏,偶数堆石头排成了一行。每一堆石头都是由正整数表示的石头组成,记为piles[i]。游戏最终以谁手中取走的石头最多来决出胜负。由于石头的总数是奇数,所以没有平局产生。
Alex和Lee轮流进行取石头,Alex先开始。 每回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。
假设Alex和Lee都表现的很出色,当Alex赢得比赛时返回 true
。
举例 1:
输入: [5,3,4,5]
输出: true
解释:
Alex先开始取石头,他可以从最左边取5,或者最右边取5;
假设他选择从左边取石头,这样剩下的就是 [3,4,5]
如果LEE取了3,则剩下[4,5],这时Alex再从右边取5,则他累计有10块石头。而LEE最多有7块石头。
如果LEE取了右边的5,则剩下[3,4],这时Alex从右边取4,则他累计有9块石头。而LEE最多有8块石头。
这样的选择方式,Alex获胜,从而我们的算法返回 true。
注意限制条件:
2 <= piles.length <= 500
piles.length 是偶数.
1 <= piles[i] <= 500
sum(piles) 是奇数.
算法设计
package com.bean.algorithmbasic;
import jav