【题意】
你们中的一些人可能玩过一个叫做消木块的游戏。
n个木块排成一列,每个木块都有一个颜色。
例如下图中木块的颜色分别为:金,银,银,银,银,铜,铜,铜,金。
每次,你都可以点击一个木块,这样被点击的木块以及和它相邻并且同色的木块就会消除。
如果一次性消除了k个木块,那么就会得到k*k分。
例如下图所示,点击银色木块,四个木块被消去,得到16分。
给定你一个游戏初始状态,请你求出最高得分是多少。
【输入格式】
第一行包含整数t,表示共有t组测试数据。
每组数据第一行包含整数n,表示共有n个木块。
第二行包含n个整数,表示n个木块的颜色。
代表木块颜色的整数范围是1~n。
【输出格式】
每组数据输出一个结果,每个结果占一行。
输出格式为“Case x: y”,其中x为数据组别编号,从1开始,y为结果。
【数据范围】
1≤t≤100
1≤n≤200
【输入样例】
2
9
1 2 2 2 2 3 3 3 1
1
1
【输出样例】
Case 1: 29
Case 2: 1
心路历程
step1:
- 理所当然地想到用区间动态规划,f[x][y]定义为区间x~y的最大得分
- 想法大概就是:每个区间的得分方法有两种
- 第一种:劈成两半,也就是:
- 第二种:若两端木块相同,可以先将中间的消掉,使两端合并ÿ