leetcode 546 移除盒子(動態規劃)

2021-09-27 02:17:17 字數 1300 閱讀 9021

給出一些不同顏色的盒子,盒子的顏色由數字表示,即不同的數字表示不同的顏色。

你將經過若干輪操作去去掉盒子,直到所有的盒子都去掉為止。每一輪你可以移除具有相同顏色的連續 k 個盒子(k >= 1),這樣一輪之後你將得到 k*k 個積分。

當你將所有盒子都去掉之後,求你能獲得的最大積分和。

示例 1:

輸入:

[1, 3, 2, 2, 2, 3, 4, 3, 1]
輸出:

23
解釋:

[1, 3, 2, 2, 2, 3, 4, 3, 1] 

----> [1, 3, 3, 4, 3, 1] (3*3=9 分)

----> [1, 3, 3, 3, 1] (1*1=1 分)

----> [1, 1] (3*3=9 分)

----> (2*2=4 分)

提示:盒子的總數 n 不會超過 100。

// 記憶化

class

solution

;return

dfs(boxes,memo,

0,n-1,

0);}

// memo[l][r][k]表示在序列l~r部分後接k長度的r值序列最大得分

// memo[l][r][3]代表[b_l, ..., b_r, a,a,a]其中b_r == a

intdfs

(vector<

int>

& boxes,

int memo[

100]

[100][

100]

,int l,

int r,

int k)

memo[l]

[r][k]

=dfs

(boxes,memo,l,r-1,

0)+(k+1)

*(k+1)

;for

(int i=l; i), ..., b_],相當於先計算後者,然後計算整體

memo[l]

[r][k]

=max

(memo[l]

[r][k]

,dfs

(boxes,memo,l,i,k+1)

+dfs

(boxes,memo,i+

1,r-1,

0));

}}return memo[l]

[r][k];}

};

Leetcode 546 移除盒子

給出一些不同顏色的盒子,盒子的顏色由數字表示,即不同的數字表示不同的顏色。你將經過若干輪操作去去掉盒子,直到所有的盒子都去掉為止。每一輪你可以移除具有相同顏色的連續 k 個盒子 k 1 這樣一輪之後你將得到 k k 個積分。當你將所有盒子都去掉之後,求你能獲得的最大積分和。示例 1 輸入 1,3,2...

leetcode 546 移除盒子

546.移除盒子 給出一些不同顏色的盒子,盒子的顏色由數字表示,即不同的數字表示不同的顏色。你將經過若干輪操作去去掉盒子,直到所有的盒子都去掉為止。每一輪你可以移除具有相同顏色的連續 k 個盒子 k 1 這樣一輪之後你將得到 k k 個積分。當你將所有盒子都去掉之後,求你能獲得的最大積分和。示例 輸...

546 移除盒子 動態規劃

題目描述 給出一些不同顏色的盒子,盒子的顏色由數字表示,即不同的數字表示不同的顏色。你將經過若干輪操作去去掉盒子,直到所有的盒子都去掉為止。每一輪你可以移除具有相同顏色的連續 k 個盒子 k 1 這樣一輪之後你將得到 k k 個積分。當你將所有盒子都去掉之後,求你能獲得的最大積分和。示例 1 輸入 ...