文章目录

  • 题目分析
  • 题目链接

题目分析

博弈论:最坏情况下求最好。

按a[i]+b[i]a[i] + b[i ]a[i]+b[i] 从大到小排序

解释:
(博弈论)每个人最优的选择都是 要求自己的−对手的自己的-对手的自己的−对手的 之差 最大。直观理解就是, 每次选择的物品使 我得到的价值和 对方损失的价值之和最大!举个例子,我和对手每人只能选择1个东西,站在我的立场,如果选择1号,我得到6块钱,对方损失1块钱;选择2号,我得到4块,对方损失4块。 请问我该选1号还是2号? 当然该选择2号。 如果选择1号, 我得到6,对方损失1,别看比选择2号表面多赚2块钱,可是敌人损失的少了啊!我的满意度是6+1 =7块钱 . 而选择2号,我得到 4块,对方损失4块,我的满意度是4+4 =8块钱。 这种博弈的结果就是:选择两者各自认为价值之和最大的!才是最优决策。

或者直接以本题的石子为例:

如果有2个石子

Alice的价位:a1, a2
Bob的价位:   b1, b2

如果 Alice选择了a1,则Bob只能选 b2 ,此时分差 a1 -b2;

或者 Alice选择 a2,则Bob选择b1,此时分差 a2 - b1。

那么这两种方案对于Alice来说哪一种更优,就取决于两个方案的价值差的比较

.如果a1 -b2 ≥a2 - b1,代表Alice赚。 移项之后等价于 a1+b2 ≥ a2+b2 。

我们可以看到,看谁能赢需要看两个人对应偏好之和。每次取偏好之和最大的,这样就能判断谁能赢。

所以贪心策略是:将两组石头的价值合并,每次取价值最大的一组

注:这里不是证明,证明还需要严格的数学归纳法!

ac代码

class Solution {public:int stoneGameVI(vector<int>& a, vector<int>& b) {vector<vector<int>> c; // c里面存 两者之和, a[i] ,b[i] 三个东西int res1=0,res2=0; //两个人得分之和for(int i=0;i<a.size();i++)c.push_back({a[i]+b[i],a[i],b[i]});sort(c.begin(),c.end());// 从小到大排序,下面则反向遍历//从大到小遍历bool flag = true ; //flag ==true 表示 Alice拿 flag ==false 表示Bob拿for(int i= c.size()-1; i>=0; i -- ){if(flag)  res1 += c[i][1];elseres2 += c[i][2];flag= !flag;}if(res1>res2) return 1;else if(res1==res2) return 0;return -1;}
};

题目链接

Leetcode1686. 石子游戏 VI

Leetcode1686. 石子游戏 VI[C++题解]:博弈论、按照a+b贪心相关推荐

  1. Leetcode1690. 石子游戏 VII[C++题解]:带有博弈论的区间dp

    文章目录 题目分析 状态表示 状态转移 题目链接 题目分析 补充博弈论的做题想法:让最坏情况下最好.在很多决策中,考虑所有的最坏情况,选其中最好的一个. 本题分析: 刚开始因为是个贪心题目,两个人每次 ...

  2. LeetCode 1686. 石子游戏 VI(贪心)

    文章目录 1. 题目 2. 解题 283 / 1660,前17% 681 / 6572,前10.4% 1. 题目 Alice 和 Bob 轮流玩一个游戏,Alice 先手. 一堆石子里总共有 n 个石 ...

  3. 石子游戏大合集[博弈论]

    题目描述(取石子游戏1) 有一种有趣的游戏,玩法如下: 玩家:2人: 道具:N颗石子: 规则: 游戏双方轮流取石子: 每人每次取走若干颗石子(最少取 1颗,最多取 K 颗): 石子取光,则游戏结束: ...

  4. Leetcode1696. 跳跃游戏 VI[C++题解]:dp和单调队列求滑动窗口最值

    文章目录 题目分析 题目链接 单调队列板子链接 Deque知识补充 题目分析 题目重述:给定一个数组(有正数有负数)和一个步长k,从下标0处开始往前跳,每次最多往前跳k步.求跳到最后一个位置,得分之和 ...

  5. 【数据结构与算法】之深入解析“石子游戏VI”的求解思路与算法示例

    一.题目要求 Alice 和 Bob 轮流玩一个游戏,Alice 先手,一堆石子里总共有 n 个石子,轮到某个玩家时,他可以移出一个石子并得到这个石子的价值.Alice 和 Bob 对石子价值有不一样 ...

  6. LeetCode 1690. 石子游戏 VII(博弈DP)

    文章目录 1. 题目 2. 解题 1. 题目 石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 . 有 n 块石子排成一排.每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头,并获 ...

  7. 动态规划---石子游戏

    动态规划---石子游戏 石子游戏(leetcode877) 石子游戏(leetcode1140) 石子游戏(leetcode1686) 石子游戏(leetcode877) 题目描述 亚历克斯和李用几堆 ...

  8. leetcode——石子游戏系列题目

    石子游戏 亚历克斯和李用几堆石子在做游戏.偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] . 游戏以谁手中的石子最多来决出胜负.石子的总数是奇数,所以没有平局. 亚历克斯和李轮流进行,亚历 ...

  9. LeetCode 877. 石子游戏

    1.题目 877. 石子游戏 2.题解 首先,一开始我觉得这道题目并不严谨.因为我大略感觉到先手选择的人就能赢得这个游戏,因为你总是可以在当前的选择中选择对自己有利的拿取方式,而后手只能在剩下的机会中 ...

最新文章

  1. UITextField长度限制的写法
  2. 模拟退火粒子群优化算法控制程序
  3. 2021年新高考八省联考成绩查询福建,2021福建八省联考成绩查询时间
  4. 留个HelpAssistant用户后门,呵呵。
  5. C和指针之字符串strtok函数
  6. React开发(102):别写立即执行函数
  7. LeetCode-726 原子的数量 递归
  8. 这才是 Python 的 “72 变”玩法!
  9. 技术栈是什么_我从找不到实习到拿大厂offer经历了什么?
  10. WIFI内部通话系统技术解决方案
  11. Ubuntu16.04 安装Firefox火狐浏览器中国版使用及升级
  12. 边缘计算是什么,对企业有什么影响?
  13. 优秀github博主
  14. C++ 类成员函数指针的使用方法
  15. python os.system保存返回值_python中os.system的返回值
  16. 羊皮卷坚持不懈直到成功_坚持不懈的秘诀:当您想做的所有事情都退出时,如何成功地成为一名开发人员
  17. win10中chrome浏览器书签路径
  18. 服务器改远程端口后怎么连接,如何修改服务器远程桌面连接端口
  19. 国家高新技术企业,哪些情况将被取消资格?
  20. 多层感知机(MLP)简介

热门文章

  1. [C++]const 总结
  2. 【NGN学习笔记】4 软交换中的协议2—Megaco/H.248
  3. 如何杀死进程及子进程
  4. 8.1 A Bayesian Methodology for Systemic Risk Assessment in Financial Networks(4)
  5. linux 打开文件表 文件描述符,文件描述符-mjsc1023-ChinaUnix博客
  6. 科研期刊分区 控制期刊介绍 领域大牛
  7. 1.8 为什么是人的表现-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  8. Token Bucket在QoS中入门级介绍python示例
  9. 基于socket的线上聊天框
  10. 无服务器计算的黑暗面:程序移植没那么容易