題意:
幾塊石子 排成一行 ,每塊石子都有乙個關聯值,關聯值為整數,由陣列 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 遊戲以誰手中的石子最多來決出勝負。石子的總數是奇數,所以沒有平局。亞歷克斯和李輪流進行,亞歷克斯先開始。每回合,玩家從行的開始或結束處取走整堆石頭。這種情況一直持續到沒有更多的石子堆為止,此時手中石子最多的玩家獲...