給出一些不同顏色的盒子,盒子的顏色由數字表示,即不同的數字表示不同的顏色。
你將經過若干輪操作去去掉盒子,直到所有的盒子都去掉為止。每一輪你可以移除具有相同顏色的連續 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 輸入 ...