動態規劃 除數博弈

2021-10-04 22:55:36 字數 1091 閱讀 5321

愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。

最初,黑板上有乙個數字 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 解釋...