zoukankan      html  css  js  c++  java
  • LeetCode刷题笔记-DP算法-取数问题

    题目描述

    (除数博弈论)爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。

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


    选出任一 x,满足 0 < x < N 且 N % x == 0 。
    用 N - x 替换黑板上的数字 N 。


    如果玩家无法执行这些操作,就会输掉游戏。

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/divisor-game

    分析:

    从前往后分析:当前结果,仅与之前的的结果相同。即:存在最有子结构->动态规划

    思想:如果我能取得一个数字,使得剩下的数字,先手必输。我就必赢。

      if(i %j==0 && dp[i-j]==0)  //在i个数中,取j个,剩个i-j个先手必输

        dp[i]==1;

    代码实现:

     1  1 public boolean divisorGame(int N) {
     2  2        int[] res = new int[N+1];
     3  3         res[1]=0;
     4  4         for(int i=2;i<=N;i++){
     5  5             if(res[i-1]==0)  //i时,先手失败,则i+1,取一个,将先手丢给对方,稳赢
     6  6                 res[i]=1;
     7  7             else{
     8  8                 res[i]=0;
     9  9                 //当我取完之后,剩下的数字为先手必输。则我必赢
    10 10                 for(int j=1;j<i;j++){  //我取了j,
    11 11                     if(i%j==0 && res[j]==0)
    12 12                         res[i]=1;
    13 13                 }
    14 14             }
    15 15         }
    16 16         
    17 17         if(res[N]==1)
    18 18             return true;
    19 19         return false;
    20 20     }
  • 相关阅读:
    mysql 查询某年某月数据~(如果数据表用时间戳)
    mongo_4.25 find() hasNext() next()
    在YII框架中有2中方法创建对象:
    bootsrap[$data]
    date
    cookie
    JavaScript shell, 可以用到 JS 的特性, forEach
    在 Yii框架中使用session 的笔记:
    mysql查询今天、昨天、7天、近30天、本月、上一月 数据
    Python 自定义异常练习
  • 原文地址:https://www.cnblogs.com/sqchao/p/11107697.html
Copyright © 2011-2022 走看看