• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Niro Einteson
文可提笔安天下 武可上马定乾坤
博客园    首页    新随笔    联系   管理    订阅  订阅

1025. 除数博弈

1025. 除数博弈

爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。

最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:

选出任一 x,满足 0 < x < N 且 N % x == 0 。
用 N - x 替换黑板上的数字 N 。
如果玩家无法执行这些操作,就会输掉游戏。

只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。

 

示例 1:

输入:2
输出:true
解释:爱丽丝选择 1,鲍勃无法进行操作。
示例 2:

输入:3
输出:false
解释:爱丽丝选择 1,鲍勃也选择 1,然后爱丽丝无法进行操作。
 

提示:

1 <= N <= 1000

 1 class Solution {
 2 public:
 3     bool divisorGame(int N) {
 4         //法2: 动态规划
 5         //定义 dp[n];从前往后推,dp[i]:代表 在i这个数字的的输赢,j代表选择的数,i%j==0,dp[i-j]的状态如果是输的话,代表 dp[i]就是赢,如果dp[i-j]是赢的话,那么在最优的参与游戏条件下,就会在0<x<i里面一直找,直到找到 输的状态,自己才会赢,否则的话,找完全部,都是赢的状态,说明自己无论选什么,对方都会赢,自己输
 6         vector<bool> dp(N+1);
 7         dp[1]=false;
 8         dp[2]=true;
 9         for(int i=3;i<=N;i++) {
10             dp[i]=false;
11             for(int j=1;j<i;j++)          //j 就是 在0<x<i 且i%j==0 条件下找 是否有输的状态
12                 if((i%j==0)&&(dp[i-j]==false)){
13                     dp[i]=true;
14                     break;
15                 }
16         }
17     return dp[N]; 
18     }
19 };

 

 1  class Solution {
 2 public:
 3     bool divisorGame(int N) {
 4         //法1:博弈论
 5         //分析:如果n=1 那么 alice 选择 在0<x<1之间无法选择,输
 6         //      n=2 ,alice选择1,在0<x<2之间,且2%1==0,所以剩余数字 x=2-1=1;此时的x=1和n=1的状态是一样的,此时 如果谁选择了n=1,那么谁就输了,所以Bob 输,alice 赢
 7         //如果 n=3,那么 alice 只能选择 n=1 在0<x<2之间,且3%1==0,剩余数字 x-1=2,此时的x=2和 n=2的状态是一样的,如果谁选择了 n=2,那么他就是赢的,所以 alice 输掉 ,Bob赢
 8         //如果n=4,Alice 选择了 2,在0<x<4之间,且4%2==0,剩余数字为2,bob选择n=2,会赢,alice会输
 9         //        alice 选择了1 ,在0<x<4之间,且4%1==0,剩余数字为3,bob选择3,输,alice 赢
10         //每个玩家都是以最优的状态 来参与比赛.例如n=4的时候,alice 先手,一定会选择1,让自己赢
11         //依次类推:谁面对奇数,谁输;谁面对偶数,谁赢
12         //
13         if(N&1) return false;
14         return true;
15 
16     }
17 };

 

posted @ 2020-04-14 22:14  Nirogo  阅读(235)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3