區間DP LeetCode5498石子遊戲

2021-10-23 17:20:05 字數 813 閱讀 6608

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

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

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

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

stonevalue = [6,2,3,4,5,5]

解釋:在第一輪中,alice 將行劃分為 [6,2,3],[4,5,5] 。左行的值是 11 ,右行的值是 14 。bob 丟棄了右行,alice 的分數現在是 11 。

在第二輪中,alice 將行分成 [6],[2,3] 。這一次 bob 扔掉了左行,alice 的分數變成了 16(11 + 5)。

最後一輪 alice 只能將行分成 [2],[3] 。bob 扔掉右行,alice 的分數現在是 18(16 + 2)。遊戲結束,因為這行只剩下一塊石頭了。

class

solution

public

intdfs

(int

s,int l,

int r)

else

else

} max = math.

max(max, ret);}

return dp[l]

[r]= max;

}}

1021 石子歸併 區間DP

思路 這題是道經典題,真的很有意思,才學dp學詳細點吧!應該算上乙個區間的dp,在寫dp的時候我覺得不僅僅只想狀態轉移方程,更要確定i j dp i j 等各個狀態參量的實際意義,否則dp方程是無法確定的。一開始想的是按照數塔階段性轉移,i表示第幾次合併,j表示合併第幾個,但是並不行。實際解題步驟 ...

1021 石子歸併 區間dp

1021 石子歸併 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 n堆石子擺成一條線。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的代價。計算將n堆石子合併成一堆的最小代價。例如 1 2 3 4,有不少...

區間DP NOI1995 石子合併

給你 n 堆石子,現在要相鄰兩堆合成一堆,直到所有石子都在一堆裡面為止,然後 1 號位的石子可以和 n 號位的石子合併,也就是說,這些石子堆圍成了乙個環。每次合併有乙個分數,這個分數就是新合併的石子堆的石子數,求最終的最小得分和最大得分 第一次寫區間dp,蠻好,區間dp相比於其他的dp至少有乙個固定...