leetcode_486. Predict the Winner
https://leetcode.com/problems/predict-the-winner/
题目描述:给定一个非负的积分数组,玩家1可以从数组两端任取一个积分,接着玩家2执行同样的操作,直至积分被取尽,总分大的获胜。两人都以最优决策进行游戏。对每个数组输出玩家1是否能获胜。
解法1:
使用递归,两者依次取数。
class Solution{ public:bool PredictTheWinner(vector<int>& nums){return dfs(nums, 0, nums.size()-1, 0, 0, 0);}bool dfs(vector<int>& nums, int st, int en, int p1, int p2, bool role){if(st == en){if(!role && p1+nums[st]>=p2)return true;else if(role && p1<p2+nums[st])return true;elsereturn false;}if(!role){bool c1 = dfs(nums, st+1,en,p1+nums[st],p2,!role);bool c2 = dfs(nums, st,en-1,p1+nums[en],p2,!role);if(c1 && c2) //若从任意一端取数后,对手都胜,那么当前玩家必败return false;elsereturn true;}else{bool c1 = dfs(nums, st+1,en,p1,p2+nums[st],!role);bool c2 = dfs(nums, st,en-1,p1,p2+nums[en],!role);if(c1 && c2)return false;elsereturn true;}} };
解法二:官方题解
对于两个玩家而言,玩家1的总分s1,玩家2的总分s2,dis=s1-s2,若玩家1胜,dis>=0,否则dis<0。依旧使用递归,双方依次取数,玩家1希望差值越大越好,玩家2希望差值越小越好。
int dfs(vector<int>& nums, int st, int en, bool role)函数返回值为:在nums[st,en]上由role取数后的总分差值dis。
class Solution{ public:bool PredictTheWinner(vector<int>& nums){return dfs(nums, 0, nums.size()-1, 0)>=0;}int dfs(vector<int>& nums, int st, int en, bool role){if(st == en){if(role == 0)return nums[st];elsereturn -nums[st];}if(!role)return max(nums[st] + dfs(nums, st+1, en, !role), nums[en]+dfs(nums, st, en-1, !role));elsereturn min(-nums[st] + dfs(nums, st+1, en, !role), -nums[en]+dfs(nums, st, en-1, !role));} };
解法三:官方题解,动态规划
dp[st][en]:玩家1在nums[st,en]上取数过后的差值dis(dis=s1-s2)
在nums[st][en]上的dis: dp[st][en]取决于{num[st], dp[st+1][en]}和{num[en], dp[st][en-1]},即仅取决于nums[st][en]子数组上的dp和num[st],num[en]。
class Solution{ public:bool PredictTheWinner(vector<int>& nums){int dp[25][25];memset(dp,0,sizeof(dp));for(int tail=1; tail<nums.size(); tail++)for(int head=tail; head>=0; head--){int get_head = nums[head] - dp[head+1][tail];int get_tail = nums[tail] - dp[head][tail-1];dp[head][tail] = max(get_head, get_tail);}return dp[0][nums.size()-1]>=0;} };
转载于:https://www.cnblogs.com/jasonlixuetao/p/10545715.html
leetcode_486. Predict the Winner相关推荐
- LeetCode - 486. Predict the Winner(排成一条线的纸牌博弈问题)
LeetCode - 486. Predict the Winner(排成一条线的纸牌博弈问题) 递归解法 动态规划解法 题目链接 题目 递归解法 定义递归函数f[i,j],表示的是如果arr[i.. ...
- 【leetcode】486. Predict the Winner
题目如下: Given an array of scores that are non-negative integers. Player 1 picks one of the numbers fro ...
- LeetCode486. Predict the Winner题解
1. 题目描述 Given an array of scores that are non-negative integers. Player 1 picks one of the numbers f ...
- LeetCode题解(Week 9):486. Predict the Winner
原题目: Given an array of scores that are non-negative integers. Player 1 picks one of the numbers from ...
- 486. Predict the Winner | 486. 预测赢家(博弈论)
题目 https://leetcode.com/problems/predict-the-winner/ 题解 这道题和 leetcode 877. Stone Game | 877. 石子游戏(递归 ...
- 继续过中等难度.0309
. 8 String to Integer (atoi) 13.9% Medium . 151 Reverse Words in a String 15.7% Mediu ...
- LeetCode刷题记录+数据结构总结
题号 思路 时间 8. String to Integer (atoi) 没想到有限自动机,写的太臃肿,边界条件考虑的也不足,用DFA分析起来就会很舒服 2020.4.3 11. Container ...
- 寒假LeetCode打卡
文章目录 @[toc] 链表专题 LeetCode 19. Remove Nth Node From End of List LeetCode 83. Remove Duplicates from S ...
- 苹果阻止升级插件ios12_苹果推出iOS 14,具有小部件和多项应用程序升级
苹果阻止升级插件ios12 It's safe to say that iOS 13 has been troublesome at best. The latest iPhone software ...
最新文章
- Linux 添加ssh 公钥访问
- DL框架之Caffe:深度学习框架之Caffe的简介、安装、使用方法详细攻略
- router3 BGP1 基础部分
- Java PushbackReader ready()方法与示例
- 【Java】统计字符串中每个字符出现的次数
- python怎样填充颜色_python – 使用颜色填充Tkinter画布对象之间的空间
- 书山有路28期预告:《人性的枷锁》
- linux gcc下实现简单socket套接字小程序
- 吾讲救活公司的办法,当事人还在玩手机,应该怎么办
- SEO经验分享之百度知道篇
- Unity世界坐标转换屏幕坐标(测试)
- 【组合数学】 牡牛和牝牛
- 6713芯片手册_tms320c6713 gpio_tms320c6713_dsp6713中文手册
- 对计算机专业的认识和未来规划,对计算机专业的认识及学业规划
- SCDM学习笔记(5)
- 数商云大宗商品交易平台案例:打造B2B大宗电商供应链服务系统,落地产业互联网
- openstack 网络更改版
- 招行首发芭比娃娃MP3
- vue.js实现单选框、复选框和下拉框
- 网易2017春招 魔力手环 矩阵快速幂
热门文章
- 040_CSS3背景
- go 公众号 关注 监听_荐号丨推荐五个适合法学院关注公众号
- python 对象销毁_python对象销毁实例(垃圾回收)
- jQuery Mobile 快速入门
- 用python画竹子_python函数
- linux x64 asm 参数传递,NASM汇编学习系列(1)——系统调用和参数传递
- onedrive目录PHP源码,另一个OneDrive目录索引应用 OLAINDEX
- 地图上制作线路的动画_魔兽争霸重制版不只是表面上这么简单,新版编辑器制作地图更容易...
- 华为云计算之储存基础知识
- Zabbix实战之客户端自动注册