區間dp+博弈論
題目描述:
石子遊戲中,愛麗絲和鮑勃輪流進行自己的回合,愛麗絲先開始 。
有 n 塊石子排成一排。每個玩家的回合中,可以從行中 移除 最左邊的石頭或最右邊的石頭,並獲得與該行中剩餘石頭值之 和 相等的得分。當沒有石頭可移除時,得分較高者獲勝。
鮑勃發現他總是輸掉遊戲(可憐的鮑勃,他總是輸),所以他決定盡力 減小得分的差值 。愛麗絲的目標是最大限度地 擴大得分的差值 。
給你乙個整數陣列 stones ,其中 stones[i] 表示 從左邊開始 的第 i 個石頭的值,如果愛麗絲和鮑勃都 發揮出最佳水平 ,請返回他們 得分的差值 。
輸入:stones = [5,3,1,4,2]
輸出:6
解釋:
- 愛麗絲移除 2 ,得分 5 + 3 + 1 + 4 = 13 。遊戲情況:愛麗絲 = 13 ,鮑勃 = 0 ,石子 = [5,3,1,4] 。
- 鮑勃移除 5 ,得分 3 + 1 + 4 = 8 。遊戲情況:愛麗絲 = 13 ,鮑勃 = 8 ,石子 = [3,1,4] 。
- 愛麗絲移除 3 ,得分 1 + 4 = 5 。遊戲情況:愛麗絲 = 18 ,鮑勃 = 8 ,石子 = [1,4] 。
- 鮑勃移除 1 ,得分 4 。遊戲情況:愛麗絲 = 18 ,鮑勃 = 12 ,石子 = [4] 。
- 愛麗絲移除 4 ,得分 0 。遊戲情況:愛麗絲 = 18 ,鮑勃 = 12 ,石子 = 。
得分的差值 18 - 12 = 6 。
解題思路:
方法1:自頂向下的記憶化搜尋dfs
方法2:自底向上的區間dp
方法2:
private int solve(int s) else }}
return dp[1][n];
}
動態規劃 5627 石子遊戲VII
思路 用dp i j 表示i到j的區間和,用res i j 表示本次操作後該選手在i與j區間獲得的最大價值差,所以無論是愛麗絲還是鮑勃,在每次操作時都是為了獲得最大價值差,才能保證題意,即愛麗絲無限度擴大差值,鮑勃盡力減小差值。在最初的時候i j,即res i j 0 當j i 1時,為了獲得最大價...
877 石子遊戲
題目描述 亞歷克斯和李用幾堆石子在做遊戲。偶數堆石子排成一行,每堆都有正整數顆石子 piles i 遊戲以誰手中的石子最多來決出勝負。石子的總數是奇數,所以沒有平局。亞歷克斯和李輪流進行,亞歷克斯先開始。每回合,玩家從行的開始或結束處取走整堆石頭。這種情況一直持續到沒有更多的石子堆為止,此時手中石子...
LeetCode877 石子遊戲
亞歷克斯和李用幾堆石子在做遊戲。偶數堆石子排成一行,每堆都有正整數顆石子 piles i 遊戲以誰手中的石子最多來決出勝負。石子的總數是奇數,所以沒有平局。亞歷克斯和李輪流進行,亞歷克斯先開始。每回合,玩家從行的開始或結束處取走整堆石頭。這種情況一直持續到沒有更多的石子堆為止,此時手中石子最多的玩家...