LeetCode 1406. 石子游戏 III(DP)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1406. 石子游戏 III(DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
Alice 和 Bob 用幾堆石子在做游戲。幾堆石子排成一行,每堆石子都對應一個得分,由數組 stoneValue 給出。
Alice 和 Bob 輪流取石子,Alice 總是先開始。在每個玩家的回合中,該玩家可以拿走剩下石子中的的前 1、2 或 3 堆石子 。比賽一直持續到所有石頭都被拿走。
每個玩家的最終得分為他所拿到的每堆石子的對應得分之和。每個玩家的初始分數都是 0 。比賽的目標是決出最高分,得分最高的選手將會贏得比賽,比賽也可能會出現平局。
假設 Alice 和 Bob 都采取 最優策略 。如果 Alice 贏了就返回 “Alice” ,Bob 贏了就返回 “Bob”,平局(分數相同)返回 “Tie” 。
示例 1: 輸入:values = [1,2,3,7] 輸出:"Bob" 解釋:Alice 總是會輸,她的最佳選擇是拿走前三堆,得分變成 6 。但是 Bob 的得分為 7,Bob 獲勝。示例 2: 輸入:values = [1,2,3,-9] 輸出:"Alice" 解釋:Alice 要想獲勝就必須在第一個回合拿走前三堆石子,給 Bob 留下負分。 如果 Alice 只拿走第一堆,那么她的得分為 1,接下來 Bob 拿走第二、三堆,得分為 5 。 之后 Alice 只能拿到分數 -9 的石子堆,輸掉比賽。 如果 Alice 拿走前兩堆,那么她的得分為 3,接下來 Bob 拿走第三堆,得分為 3 。 之后 Alice 只能拿到分數 -9 的石子堆,同樣會輸掉比賽。 注意,他們都應該采取 最優策略 ,所以在這里 Alice 將選擇能夠使她獲勝的方案。示例 3: 輸入:values = [1,2,3,6] 輸出:"Tie" 解釋:Alice 無法贏得比賽。如果她決定選擇前三堆,她可以以平局結束比賽,否則她就會輸。示例 4: 輸入:values = [1,2,3,-1,-2,-3,7] 輸出:"Alice"示例 5: 輸入:values = [-1,-2,-3] 輸出:"Tie"提示: 1 <= values.length <= 50000 -1000 <= values[i] <= 1000來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/stone-game-iii
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
類似題目:LeetCode 877. 石子游戲(DP)
- 參考大佬題解
- 不管怎么取,第0個是Alice的,反向往前推
- dp[i] 表示取到 i 號石頭時的最大得分
- sum 表示【i,…end】的和
- dp[i] 是取1個石頭過來的,前面別人取的最大值是dp[i+1],我在位置 i 取的值就是 sum - dp[i+1]
- dp[i] 是取2個石頭過來的,前面別人取的最大值是dp[i+2],我在位置 i 取的值就是 sum - dp[i+2]
- dp[i] 是取3個石頭過來的,前面別人取的最大值是dp[i+3],我在位置 i 取的值就是 sum - dp[i+3]
- 取上面3種情況的max
624 ms 132.3 MB
總結
以上是生活随笔為你收集整理的LeetCode 1406. 石子游戏 III(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 131. 分割回文串(
- 下一篇: 程序员面试金典 - 面试题 16.16.