链接
题目描述
有一堆连续的木块,每个木块有自己的颜色,同样颜色的可以一键消除,可以获得消除个数的平方分数,现在要求这堆木块的最大分数
样例输入
2
9
1 2 2 2 2 3 3 3 1
1
1
样例输出
Case 1: 29
Case 2: 1
思路
区间DP,本来想着设 f l , r f_{l,r} fl,r为区间l到r的最大分数,但想到除去这段区间之后有可能两端再相邻可能会再颜色相同,那么我们就要再维护第三维 k k k用来记录r后面有k个与r相同颜色的数,相当于说是给第r段加多k的数,那么我们就可以来做了
区间l~r,可以考虑先把l到r-1这段区间做了,然后r这段区间直接一起消除
也可以在区间l~r之中找一个和r的颜色相同的位置,那么我们就可以这个位置为分割点,前后分别处理这段区间
f l , r = m a x ( f l , r − 1 , 0 + ( l e n r + k ) 2 , f l , m i d , l e n r + k + f m i d + 1 , r − 1 , 0 ) f_{l,r} = max(f_{l,r-1, 0} + (len_r + k)^2, f_{l,mid,len_r + k} + f_{mid + 1, r - 1,0}) f