洛谷P1622 释放囚犯【区间DP】【绿】

Date:2022.03.22
题目描述
Caima 王国中有一个奇怪的监狱,这个监狱一共有 P 个牢房,这些牢房一字排开,第 i 个紧挨着第 i+1 个(最后一个除外)。现在正好牢房是满的。
上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的 P 个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会很气愤,导致他们那天会一直大吼大叫,搞得看守很头疼。如果给这些要发火的人吃上肉,他们就会安静点。
输入格式
第一行两个整数 PP 和 QQ,QQ 表示释放名单上的人数;
第二行 QQ 个整数,表示要释放哪些人。
输出格式
仅一行,表示最少要给多少人次送肉吃。
输入输出样例
输入 #1复制
20 3
3 6 14
输出 #1复制
35
说明/提示
样例说明 #1
先释放 14 号监狱中的罪犯,要给 1 到 13 号监狱和 15 到 2020 号监狱中的 19 人送肉吃;再释放 6 号监狱中的罪犯,要给 1 到 5 号监狱和 7 到 13 号监狱中的 12 人送肉吃;最后释放 3 号监狱中的罪犯,要给 1 到 2 号监狱和 4 到 5 号监狱中的 4 人送肉吃。
数据规模与约定
对于 50% 的数据,1≤P≤100,1≤Q≤5;
对于 100% 的数据,1≤P≤10^3,1≤Q≤100,Q≤P。

思路:试过了二进制枚举状压(一看就太大了)、硬枚举等方法…都会t。我们倒着想,先释放最后一个囚犯,等价于将与其左右相邻的两个区间合并为一个区间的花费(参考石子合并),合并完了就将这个囚犯所在的位置(也就是两个被合并区间的间断点)补上,这样才合并为一个完整的区间;类比这样一直合并…直到释放第一个囚犯,相当于把与其紧邻的两个大区间合并为一个区间,至此完成合并,所以这个过程完全等价于石子合并。
我们预处理出给定的q+1个区间,按石子合并的思想来区间dp,但要注意每次合并编号为 [ l , r ] [l,r] [l,r]的区间,其中会有 l e n − 1 = r − l + 1 − 1 len-1=r-l+1-1 len1=rl+11个间断点划分出 l e n len len个区间,但由于有一个间断点是我们枚举的 k k k【也就是合并 [ l , r ] [l,r]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值