JAVA算法:取石子游戏(博弈)

本文介绍了一个JAVA实现的取石子游戏,玩家Alex和Lee轮流从偶数堆石头中取整堆,目标是取得最多的石头。通过算法分析,当Alex能确保获胜时返回true。例如,给定石子堆[5,3,4,5],经过策略选择,Alex可以确保获胜。游戏限制条件包括:石子堆数量为偶数,每堆石头数量在1到500之间,且总和为奇数。" 124188891,11441754,Java八大排序算法详解与性能对比,"['算法', '数据结构']
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值