愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。
最初,黑板上有乙個數字 n 。在每個玩家的回合,玩家需要執行以下操作:
選出任一 x,滿足 0 < x < n 且 n % x == 0 。
用 n - x 替換黑板上的數字 n 。
如果玩家無法執行這些操作,就會輸掉遊戲。
只有在愛麗絲在遊戲中取得勝利時才返回 true,否則返回 false。假設兩個玩家都以最佳狀態參與遊戲。
示例 1:
輸入:2
輸出:true
解釋:愛麗絲選擇 1,鮑勃無法進行操作。
示例 2:
輸入:3
輸出:false
解釋:愛麗絲選擇 1,鮑勃也選擇 1,然後愛麗絲無法進行操作。
數學解法
解題思路
數學思想
歸納法:
基本思路:
最終結果應該是拿到 2 的贏,拿到 1 的輸;
也就是當前為奇數,奇數的約數(%)只能是奇數或者 1,因此下乙個一定是偶數;
要是當前為偶數, 偶數的約數(%)可以是奇數可以是偶數也可以是 1,因此直接減 1,則下乙個是奇數;
所以得出,奇數則輸,偶數則贏
**
class
solution
}
動態規劃寫法
當n=1時,先走輸;
當n=2時,先走贏;
這些先存進dp陣列裡,代表子問題的最優解。
n=3之後,先走的如果想贏(假設愛麗絲如果想贏),就需要找到小於n的數k,能使得在符合條件(n%k==0)的基礎上還能讓n-k(下一局的n)還是先走輸。
即在內層迴圈中如果找到乙個數使得if((dp[i-j]= =false)&&(i%j= =0)),**(= = 表示是==的意思 )**那麼該數是先走贏,一層迴圈走下來找不到這麼乙個數的話,那麼該數是先走輸。所以只要找到乙個符合條件就可以直接跳出迴圈了。
class
solution
}return dp[n];}
}
動態規劃 1025 除數博弈
難度easy 愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字 n 在每個玩家的回合,玩家需要執行以下操作 選出任一 x,滿足 0 x n 且 n x 0 用 n x 替換黑板上的數字 n 如果玩家無法執行這些操作,就會輸掉遊戲。只有在愛麗絲在遊戲中取得勝利時才返回 tr...
動態規劃系列 1025 除數博弈
package test 動態規劃系列 1025.除數博弈 愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字 n 在每個玩家的回合,玩家需要執行以下操作 選出任一 x,滿足 0 x n 且 n x 0 用 n x 替換黑板上的數字 n 如果玩家無法執行這些操作,就會輸掉遊...
1025 除數博弈
愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字n。在每個玩家的回合,玩家需要執行以下操作 如果玩家無法執行這些操作,就會輸掉遊戲。只有在愛麗絲在遊戲中取得勝利時才返回true,否則返回false。假設兩個玩家都以最佳狀態參與遊戲。示例 1 輸入 2 輸出 true 解釋...