LeetCode 5024 除数博弈 --(简单博弈论)

今天在LeetCode的看到一到题目
这道题目有点坑,没有思路的话容易钻牛角。
刚刚开始时,我想的是直接用while循环来模拟计算,后来觉得这么好麻烦,也有复制的逻辑在里面。后面我推导了一下
以下是我的推导过程,爱丽丝简称 A 鲍勃 简称B
当num=2时,A=1-->num=num-1=1,A赢
当num=3时,A只能出1,-->num=num-1=2,此时B正好处于num=2的情况,所以B可以用之前A的策略,B赢
当num=4时,A可以出1 或 2,但是为了赢,A必须让B处于输的情况,也就是num=3的情况。所以A出1,-->num=num-1=3
当num=5时,A可以出1,-->num=num-1=4,此时B正好处于num=4的情况,B赢
当num=6时,A可以出1,2,3,但是A为了赢,必须让B处于必输的情况下,A出1-->num=num-1,当B出时,num=5,B输。
以此类推,
我们可以得出结论
当N%2==0时,先出的赢
当N%2!=0时,后出的赢****
所以这道题目的解为

    public boolean divisorGame(int N) {
        if(N%2==0){
            return true;
        }else{
            return false;
        }
    }

就是这么简单。
我之前还做过另一个类似的题目。
题目好像是:

两个人,轮流报数 1或2 ,然后不停往上加,谁加到30谁就赢。
其实用的是同样的思想。
这种思想和博弈论一样,都是在最理性的情况下进行分析的,
bilibili有好多类似的视频 av7852097 红眼岛岛民自杀事件
海盗分金什么的

原文地址:https://www.cnblogs.com/duangL/p/11575106.html

时间: 2024-10-12 01:33:14

LeetCode 5024 除数博弈 --(简单博弈论)的相关文章

[1] LeetCode 1025.除数博弈

做的LeetCode第一题....疯狂错误编译, 原来true or false 是给你return的, 函数已经写好了..... 完整题目 题目大意: A B 两人玩游戏 , 轮流进行, A 先手, A 胜利则输出 true, A失败输出 false 游戏内容: 给一个数字n, 你可以进行一次操作,  将 n 变为 n-x, n的要求: x必须满足 n % x == 0(n可以被x整除) 并且  0 < x < n 分析: 1:  false   A先手 没有数字被1整除还小于1的 所以A不

leetcode 1025. 除数博弈(Divisor Game)

目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % x == 0 . 用 N - x 替换黑板上的数字 N . 如果玩家无法执行这些操作,就会输掉游戏. 只有在爱丽丝在游戏中取得胜利时才返回 true,否则返回 false.假设两个玩家都以最佳状态参与游戏. 示例 1: 输入:2 输出:true 解释:爱丽

简单博弈论总结

简单博弈论 本次简单博弈论讲解六个知识点: 1:bash博弈:2:nim博弈:3:威佐夫博弈:4:Fibonacci博弈:5:sg函数: 首先介绍博弈论问题有如下几个特点 1:博弈模型为两人轮流决策的博弈.并且两人都使用最优策略来取得胜利. 两个玩家,都会采取最优的决策,那么如果存在一个局面为必胜局面,某玩家位于此局面.只要自己无失误,则必胜.那么同样又一个局面为必败局面,某玩家位于此局面.只要对手无失误,则必败. 那也就是说,针对这样的游戏,我们关注点应该在局面上. 2:博弈是有限的.即无论两

Leetcode之动态规划(DP)专题-1025. 除数博弈(Divisor Game)

爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % x == 0 . 用 N - x 替换黑板上的数字 N . 如果玩家无法执行这些操作,就会输掉游戏. 只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false.假设两个玩家都以最佳状态参与游戏. 示例 1: 输入:2 输出:true 解释:爱丽丝选择 1,鲍勃无法进行操作. 示例 2: 输入:3 输出:f

简单博弈论总结加例题解析

(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜.因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜.总之,

博弈简单题目

HDU 1846 有n个石头,2个人,每次只能拿m个,谁最后拿完谁赢. 假如n%(m+1)==0,第一个人拿x个,那么第二个人拿m+1-x个,第一个人拿完之后,第二个人始终能拿. HDU 2147 有n*m个格子和一个棋子,棋子初始在(1,m),每次移动棋子只能到3个位置(左边,下边和左下),谁不能走谁就输. HDU 2188 和HDU1846一样 HDU 2149 和HDU1846类似 HDU 1847 有n张牌,可以拿2的幂次(即:1,2,4,8,16-)张拍,谁先拿完谁赢. 打SG函数表,

简单博弈论取石子

有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理.下面我们来分析一下要如何才能够取胜. (一)巴什博弈(Bash Game,同余理论):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜.

SG博弈简单题

ZOJ - 2083 - Win the Game 题目传送:Win the Game 最近正在慢慢体会博弈里面的SG函数的意义 此题是最简单的SG博弈问题,只需打个表就OK了 AC代码: #include <map> #include <set> #include <list> #include <cmath> #include <deque> #include <queue> #include <stack> #inc

LeetCode~移除元素(简单)

移除元素(简单) 1. 题目描述 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 元素的顺序可以改变.你不需要考虑数组中超出新长度后面的元素. 示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2. 你不需要考虑数组中超出新长度后面的元素. 示例 2: 给定