LeetCode 1563 石子遊戲 V

2021-10-23 18:30:08 字數 1242 閱讀 5652

題意:

幾塊石子 排成一行 ,每塊石子都有乙個關聯值,關聯值為整數,由陣列 stonevalue 給出。

遊戲中的每一輪:alice 會將這行石子分成兩個 非空行(即,左側行和右側行);bob 負責計算每一行的值,即此行中所有石子的值的總和。bob 會丟棄值最大的行,alice 的得分為剩下那行的值(每輪累加)。如果兩行的值相等,bob 讓 alice 決定丟棄哪一行。下一輪從剩下的那一行開始。

只 剩下一塊石子 時,遊戲結束。alice 的分數最初為 0 。

返回 alice 能夠獲得的最大分數 。

解題思路:

動態規劃

採用遞迴加記憶化搜尋實現動態規劃

class solution 

}return $this->dfs(0, $n-1, $stonevalue);

}function dfs($l, $r, $arr)

if($this->dp[$l][$r] != -1)

$sum = 0; $ans = 0; $cur = 0;

for($i = $l; $i <= $r; $i++)

for($mid = $l; $mid < $r; $mid++) else if($cur > $sum - $cur) else

$ans = max($ans, $now);

}return $this->dp[$l][$r] = $ans;

}}

注意:o(n^3)複雜度高,超時**

class solution 

}$sum[0] = $stonevalue[0];

for($i = 1; $i < $n; $i++)

for($len = 0; $len <= $n; $len++)

$lv = $sum[$mid] - ($l > 0 ? $sum[$l-1]:0);

$lr = $sum[$r] - $sum[$mid];

if($lv == $lr) else if($lv > $lr) else }}

}return $dp[0][$n-1];

}}

LeetCode877 石子遊戲

亞歷克斯和李用幾堆石子在做遊戲。偶數堆石子排成一行,每堆都有正整數顆石子 piles i 遊戲以誰手中的石子最多來決出勝負。石子的總數是奇數,所以沒有平局。亞歷克斯和李輪流進行,亞歷克斯先開始。每回合,玩家從行的開始或結束處取走整堆石頭。這種情況一直持續到沒有更多的石子堆為止,此時手中石子最多的玩家...

LeetCode 877 石子遊戲

usr bin python3 coding utf 8 time 2019 3 16 author xfli the file.這是乙個數學問題,要注意的有兩點,第一,有偶數堆,第二,總數為奇數,不存在平局。所以這樣想,如果有2堆,亞歷克斯選乙個多的,肯定贏了,如果有4堆,平分兩堆,亞歷克斯每兩堆...

LeetCode 877 石子遊戲

亞歷克斯和李用幾堆石子在做遊戲。偶數堆石子排成一行,每堆都有正整數顆石子piles i 遊戲以誰手中的石子最多來決出勝負。石子的總數是奇數,所以沒有平局。亞歷克斯和李輪流進行,亞歷克斯先開始。每回合,玩家從行的開始或結束處取走整堆石頭。這種情況一直持續到沒有更多的石子堆為止,此時手中石子最多的玩家獲...