【阶段1】【动态规划DP】POJ 1390 Blocks or 消木块

【题意】
你们中的一些人可能玩过一个叫做消木块的游戏。
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的最大得分
  • 想法大概就是:每个区间的得分方法有两种
  • 第一种:劈成两半,也就是:f[x][y]=max(f[x][y],f[x][k]+f[k+1][y]);
  • 第二种:若两端木块相同,可以先将中间的消掉,使两端合并ÿ
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值