当前位置:网站首页>LeetCode 486. 预测赢家--动态规划+博弈论
LeetCode 486. 预测赢家--动态规划+博弈论
2022-04-22 05:36:00 【Guapifang】
- 预测赢家
给你一个整数数组 nums 。玩家 1 和玩家 2 基于这个数组设计了一个游戏。
玩家 1 和玩家 2 轮流进行自己的回合,玩家 1 先手。开始时,两个玩家的初始分值都是 0 。每一回合,玩家从数组的任意一端取一个数字(即,nums[0] 或 nums[nums.length - 1]),取到的数字将会从数组中移除(数组长度减 1 )。玩家选中的数字将会加到他的得分上。当数组中没有剩余数字可取时,游戏结束。
如果玩家 1 能成为赢家,返回 true 。如果两个玩家得分相等,同样认为玩家 1 是游戏的赢家,也返回 true 。你可以假设每个玩家的玩法都会使他的分数最大化。
示例 1:
输入:nums = [1,5,2]
输出:false
解释:一开始,玩家 1 可以从 1 和 2 中进行选择。
如果他选择 2(或者 1 ),那么玩家 2 可以从 1(或者 2 )和 5 中进行选择。如果玩家 2 选择了 5 ,那么玩家 1 则只剩下 1(或者 2 )可选。
所以,玩家 1 的最终分数为 1 + 2 = 3,而玩家 2 为 5 。
因此,玩家 1 永远不会成为赢家,返回 false 。
示例 2:
输入:nums = [1,5,233,7]
输出:true
解释:玩家 1 一开始选择 1 。然后玩家 2 必须从 5 和 7 中进行选择。无论玩家 2 选择了哪个,玩家 1 都可以选择 233 。
最终,玩家 1(234 分)比玩家 2(12 分)获得更多的分数,所以返回 true,表示玩家 1 可以成为赢家。
提示:
1 <= nums.length <= 20
0 <= nums[i] <= 107
题解
博弈论问题,好的,直接动态规划处理下吧,我们定义两个数组dp[0]和dp[1]表示玩家1和玩家2能得到的最大分数,最后判断下谁的分数大即可。
AC代码
class Solution {
public:
int dp[25][25][2];//dp[][][0]表示玩家1的最大得分,dp[][][1]表示玩家2的最大得分
bool PredictTheWinner(vector<int>& nums)
{
memset(dp,0,sizeof(dp));
for(int i=nums.size();i>=1;i--)
{
for(int j=i;j<=nums.size();j++)
{
dp[i][j][0] = max(-dp[i+1][j][1] + nums[i-1],-dp[i][j-1][1]+nums[j-1]);
dp[i][j][1] = max(-dp[i+1][j][0] + nums[i-1],-dp[i][j-1][0]+nums[j-1]);
}
}
return dp[1][nums.size()][0]>=0;//因为玩家1先手,最后只需要判断下玩家1获得的分数是否大于等于0即可
}
};

版权声明
本文为[Guapifang]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43918046/article/details/123521506
边栏推荐
猜你喜欢

伪代码块编写(论文编写用)

提高工作效率的利器

Force buckle 19 Delete the penultimate node of the linked list

Strong connected component of "tarjan" undirected graph

为什么要引入协程

mysql中on duplicate key update 使用详解

stl alloc 空间分配器 代码解析

Exploration des données - regroupement

raspberry keras-ocr can‘t allocate memory in static TLS block

Goodbye 20202021 I'm coming
随机推荐
Arrays常用方法(超详解)
POI 和 EasyExcel练习
数据处理代码记录
【转】MySQL:InnoDB一棵B+树可以存放多少行数据?
MySQL Basics
opencv 使用 forEach 像素遍历(pixel 和 const int* position参数都有介绍)
Single machine deployment redis master-slave and sentinel mode (one master, two slave and three sentinels)
Collections多个参数排序
Optional最佳实践
Force buckle 19 Delete the penultimate node of the linked list
数据挖掘——逻辑回归
Circular linked list 2
导弹拦截问题(dp,dilworth定理)
TP50、TP90、TP99的理解和使用
01背包问题(模板)
等腰三角形-第九届蓝桥省赛-C组
09-Redis之IO多路复用
fastjson判断JSON字符串是Object还是List<Object>
Error Putty X11 proxy: Authorisation not recognised
cookie 和 session 的区别