文章目录

  • 1. 题目
  • 2. 解题


283 / 1660,前17%

681 / 6572,前10.4%

1. 题目

Alice 和 Bob 轮流玩一个游戏,Alice 先手。

一堆石子里总共有 n 个石子,轮到某个玩家时,他可以 移出 一个石子并得到这个石子的价值。
Alice 和 Bob 对石子价值有 不一样的的评判标准

给你两个长度为 n 的整数数组 aliceValues 和 bobValues 。
aliceValues[i] 和 bobValues[i] 分别表示 Alice 和 Bob 认为第 i 个石子的价值。

所有石子都被取完后,得分较高的人为者。
如果两个玩家得分相同,那么为平局。
两位玩家都会采用 最优策略 进行游戏。

请你推断游戏的结果,用如下的方式表示:

  • 如果 Alice 赢,返回 1 。
  • 如果 Bob 赢,返回 -1 。
  • 如果游戏平局,返回 0 。
示例 1:
输入:aliceValues = [1,3], bobValues = [2,1]
输出:1
解释:
如果 Alice 拿石子 1 (下标从 0开始),那么 Alice 可以得到 3 分。
Bob 只能选择石子 0 ,得到 2 分。
Alice 获胜。示例 2:
输入:aliceValues = [1,2], bobValues = [3,1]
输出:0
解释:
Alice 拿石子 0 , Bob 拿石子 1 ,他们得分都为 1 分。
打平。示例 3:
输入:aliceValues = [2,4,3], bobValues = [1,6,7]
输出:-1
解释:
不管 Alice 怎么操作,Bob 都可以得到比 Alice 更高的得分。
比方说,Alice 拿石子 1 ,Bob 拿石子 2 , Alice 拿石子 0 ,Alice 会得到 6 分而 Bob 得分为 7 分。
Bob 会获胜。提示:
n == aliceValues.length == bobValues.length
1 <= n <= 10^5
1 <= aliceValues[i], bobValues[i] <= 100

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/stone-game-vi
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:
LeetCode 877. 石子游戏(DP)
LeetCode 1140. 石子游戏 II(DP)*
LeetCode 1406. 石子游戏 III(DP)
LeetCode 1563. 石子游戏 V(DP)
LeetCode 5447. 石子游戏 IV hard(博弈DP)
LeetCode 1025. 除数博弈(动态规划)
LeetCode 5627. 石子游戏 VII(博弈DP)

  • 贪心,没有证明,蒙过去的,两者的和相加,大的优先拿走
  • 参考大佬证明:题解区
  • 假设 两个物品价值(a1, b1),(a2, b2)a1-b2 (a拿1,b拿2) > a2-b1 (a拿2,b拿1) -->等价于 a1+b1 > a2+b2
class Solution {public:int stoneGameVI(vector<int>& aliceValues, vector<int>& bobValues) {int n = aliceValues.size();vector<pair<int, int>> delta(n);for(int i = 0; i < n; i++) {delta[i].first = aliceValues[i]+bobValues[i];//和大的优先delta[i].second = i;}sort(delta.rbegin(), delta.rend());//和大的优先int a = 0, b = 0;bool alice = true;for(int i = 0; i < n; ++i){if(alice)a += aliceValues[delta[i].second];elseb += bobValues[delta[i].second];alice = !alice;}if(a > b) return 1;else if(a < b) return -1;return 0;}
};

816 ms 105.4 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1686. 石子游戏 VI(贪心)相关推荐

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

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

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

    文章目录 题目分析 题目链接 题目分析 博弈论:最坏情况下求最好. 按a[i]+b[i]a[i] + b[i ]a[i]+b[i] 从大到小排序 解释: (博弈论)每个人最优的选择都是 要求自己的−对 ...

  3. LeetCode 55. 跳跃游戏(贪心)

    1. 题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1:输入: [2,3,1,1,4] 输出: ...

  4. LeetCode 1406. 石子游戏 III(DP)

    1. 题目 Alice 和 Bob 用几堆石子在做游戏.几堆石子排成一行,每堆石子都对应一个得分,由数组 stoneValue 给出. Alice 和 Bob 轮流取石子,Alice 总是先开始.在每 ...

  5. LeetCode 1690.石子游戏VII

    LeetCode 1690.石子游戏VII 问题描述: 石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 . 有 n 块石子排成一排.每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的 ...

  6. LeetCode 1696. 跳跃游戏 VI(优先队列 / 单调队列)

    文章目录 1. 题目 2. 解题 2.1 贪心错误解 2.2 优先队列/单调队列 1. 题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 k . 一开始你在下标 0 处.每一步,你最多可 ...

  7. LeetCode 1140. 石子游戏 II(DP)*

    文章目录 1. 题目 2. 解题 1. 题目 亚历克斯和李继续他们的石子游戏.许多堆石子 排成一行,每堆都有正整数颗石子 piles[i].游戏以谁手中的石子最多来决出胜负. 亚历克斯和李轮流进行,亚 ...

  8. LeetCode 1140.石子游戏 II

    题目描述 爱丽丝和鲍勃继续他们的石子游戏.许多堆石子 排成一行,每堆都有正整数颗石子 piles[i].游戏以谁手中的石子最多来决出胜负. 爱丽丝和鲍勃轮流进行,爱丽丝先开始.最初,M = 1. 在每 ...

  9. LeetCode 877. 石子游戏

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

最新文章

  1. php getconfig,PHP: tidy::getConfig - Manual
  2. 两篇大而全的SLAM综述
  3. 黑马lavarel教程---9、缓存操作
  4. Spring boot 默认静态资源路径与手动配置访问路径的方法
  5. 哪位大兄弟有用 cMake 开发Android ndk的
  6. 工作408- Module build failed (from ./node_modules/sass-loader/dist/cjs.js)
  7. git 提交遇到error:fail to push some refer to 远程地址(url)
  8. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目
  9. 笔记--Spring in action
  10. HOJ 2275 Number sequence
  11. 狂雨小说cms采集规则教程
  12. 《深入理解JVM虚拟机》读书笔记(一)
  13. 基于单片机的人体心率脉搏检测系统
  14. Delphi 10.3.3 安装DevExpress VCL 19 教程
  15. 60天申请软件著作权
  16. 使无效html代码,blockquote p css无效,让blockquote p不缩进的方法
  17. html5 spice 虚拟桌面,开源桌面虚拟化spice体验
  18. 使用useState因异步导致数据不能及时更新的问题
  19. xp远程linux打印,在Ubuntu下访问xp打印机
  20. bga焊盘怎么做_一种bga焊盘封装结构的制作方法

热门文章

  1. Emmet的html语法
  2. Python02期(北京)课程笔记索引
  3. JavaScript使用场景
  4. sum怎么用python_python sum()函数和.sum(axis=0)函数的使用
  5. [c++]代理对象模式
  6. html5carousel图片轮播,jQuery响应式轮播图插件VM Carousel
  7. 使用VS2015编写C/C++开始步骤
  8. Javascript中NaN、null和undefinded的区别
  9. jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理
  10. C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它...