【YbtOJ高效进阶】【区间DP】消除木块

这篇博客介绍了如何利用区间动态规划(DP)解决消除木块问题,以获取最大分数。通过维护区间最大分数,并考虑两端相邻木块颜色相同的情况,博主提出使用第三维k来跟踪后续相同颜色的数量。文章提供了样例输入、输出,思路解析以及代码实现。
摘要由CSDN通过智能技术生成

链接

YbtOJ 消除木块

题目描述

有一堆连续的木块,每个木块有自己的颜色,同样颜色的可以一键消除,可以获得消除个数的平方分数,现在要求这堆木块的最大分数

样例输入

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值