通用算法 - [博弈论] - 双人取数游戏

本文介绍了一个双人轮流从数组两端取数的游戏,分析了如何找到玩家A的最大得分策略。通过动态规划的方法,阐述了问题的解题思路,并提供了状态转移方程。最后,讨论了利用前缀和优化计算的方案。
摘要由CSDN通过智能技术生成

1、问题描述

给定一个数组nums,a、b两人轮流从数组的左端或右端取一个数作为自己的得分,假设两人足够聪明,都采用最优的策略取数,且a先取,问a能能拿到的最大的分数是多少?
示例:

输入:nums=[4,7,5,3]
输出:10
解释:a能拿到的最大分数为7+3=10.

2、解题思路

分析:由题意,我们可以明确以下几点:
(1) 当选手 a a a b b b在子数组 n u m s [ i , . . . , j ] nums[i,...,j] nums[i,...,j]中取数时,无论怎么取, a a a b b b最终的得分之和总是一个固定值,这个固定值等于子数组的所有元素之和;
(2) 假设 d p [ i ] [ j ] dp[i][j] dp[i][j]表示 a a a选手在子数组 n u m s [ i , . . . , j ] nums[i,...,j] nums[i,...,j]取数时的最优解,由于 b b b选手每次也是选择最优的解,所以 d p [ i + 1 ] [ j ] dp[i+1][j] dp[i+1][j]或者 d p [ i ] [ j − 1 ] dp[i][j-1]

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Albert_YuHan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值