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

区间DP与石子合并变种:洛谷P1622“释放囚犯”问题深度解析 动态规划(DP)是解决最优化问题的核心算法范式,尤其适用于具有重叠子问题和最优子结构特性的场景。区间DP作为DP的重要分支,专门处理对序列区间进行操作且操作顺序影响总代价的问题,其经典思想是将大区间的最优解通过枚举分割点分解为两个更小区间最优解的组合。这一原理在解决如石子合并、矩阵链乘、最优二叉搜索树等经典问题上展现出巨大技术价值。在算法竞赛和工程实践中,区间DP模型常被用于资源分配、任务调度和序列分割等应用场景。本文以洛谷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]的区间,其中会有len−1=r−l+1−1len-1=r-l+1-1len−1=r−l+1−1个间断点划分出lenlenlen个区间,但由于有一个间断点是我们枚举的kkk【也就是合并[l,r][l,r][l,r]这个大区间是由哪两个f[l][k]、f[k+1][r]f[l][k]、f[k+1][r]f[l][k]、f[k+1][r]得来的(我们也可将这一步看做要填入的囚犯是在编号为[k,k+1][k,k+1][k,k+1]这个区间之内的点,填入即连接了f[l][k]和f[k+1][r]f[l][k]和f[k+1][r]f[l][k]和f[k+1][r]为完整的f[l][r]f[l][r]f[l][r])】,并且到这一步时,f[l][k]和f[k+1][r]f[l][k]和f[k+1][r]f[l][k]和f[k+1][r]已分别合并为两个区间了,因此这一步除了区间合并的贡献,我们还有当前点对[l,k]和[k+1,r][l,k]和[k+1,r][l,k]和[k+1,r]里的其它已经填补的间断点的贡献(这里自己想想吧,说的有点乱),显然这些间断点共有len−1−1len-1-1len−1−1个,因为有一个是当前编号为[k,k+1][k,k+1][k,k+1]之间的点,因此每一步区间合并,都要加上len-1-1。
可能有点乱,我们清晰定义一下f[l][r]:f[l][r]:f[l][r]:将所有编号为[l,r][l,r][l,r]的区间合并所需的最小花费(考虑间断点的贡献)。
代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int n,m,f[N][N],a[N],b[N],sum[N];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++) cin>>a[i];b[1]=a[1]-1;sum[1]=b[1];
    for(int i=2;i<=m;i++)
    {
        b[i]=a[i]-a[i-1]-1;
        sum[i]=sum[i-1]+b[i];
    }
    b[m+1]=n-a[m];sum[m+1]=sum[m]+b[m+1];
    for(int len=2;len<=m+1;len++)
        for(int l=1;l+len-1<=m+1;l++)
        {
            int r=l+len-1;f[l][r]=1e9;
            for(int k=l;k<r;k++)
                f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]+sum[r]-sum[l-1]+len-1-1);
        }
    cout<<f[1][m+1];
    return 0;
}
释放囚犯-c++题解 文章目录题目描述题目理解解题思路 题目来源:洛谷P1622 原题面 题目描述 Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外)。现在正好牢房是满的。 上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的P个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会很气... 阅读详情

相关推荐

lvds接口_LVDS,接口,时序讲解,非常好的文章

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群1.1.1 LVDS接口分类1.1.1.1 单路6bit LVDS这种接口电路中,采用单路方式传输,每个基色信号采用6位数据,共18位RGB数据,因此,也称18位或18bit LVDS接口。此,也称18位或18bit LVDS接口。1.1.1.2 双路6bit LVDS这种接口电...

weixin_39639286的博客 1902

洛谷 P1622 释放囚犯(区间dp)

表示这个区间内罪犯的人数,最后。是因为不需要给释放的罪犯喂肉。

weixin_74754298的博客 481

告别图像畸变:手把手教你用HALCON的`gen_image_to_world_plane_map`做高精度视觉测量

本文详细解析了HALCON的`gen_image_to_world_plane_map`算子在工业视觉测量中的应用,通过精确的几何变换消除透视畸变,提升测量精度。文章涵盖相机标定、世界坐标系建立、实战应用及性能优化,适用于液晶屏质检、金属板检测等场景,帮助工程师实现高精度视觉测量。

weixin_28718487的博客 423

P1622 释放囚犯,区间dp,区间dp初始化问题

观察上面的状态转移方程,可以发现更新状态 f[i][j] 的过程中会用到 f[i][k-1] 状态,而且并不能保证此状态已经更新过,而在更新 f[i][j] 的过程中我们有要求如果上一个状态没有更新过,那么我们希望他为 0 ,所以我们不能直接用memset来直接为dp数组附上无穷大的值,而是在更新之前才能将它赋值为无穷大。上级下发了一个释放名单,要求每天释放名单上的一个人。则状态转移方程为:f[i][j]=min(f[i][j],f[i][k-1]+f[k+1][j]+a[j+1]-a[i-1]-1-1)

Landing_on_Mars的博客 390

保姆级避坑指南:Mid-360雷达到手后,用livox_ros_driver2从接线到出点云的完整流程

本文提供Mid-360雷达到手后的完整使用指南,涵盖从硬件接线、网络配置到livox_ros_driver2驱动的安装与调试,帮助用户避开常见陷阱,实现点云数据的稳定输出与可视化。重点解析了配置文件的参数设置和点云格式选择,确保用户能够高效部署和使用Mid-360雷达。

weixin_30733003的博客 484

GIS国土工具实战:从地类分析到坐标转换,一站式解决项目难题

本文详细介绍了GIS国土工具在国土整治项目中的高效应用,涵盖地类分析、坐标转换、影像加载等核心功能。通过实战案例展示如何利用该工具快速处理shp与txt文件转换、智能比对三调二调数据,以及优化影像加载策略,显著提升项目效率。特别适合需要处理复杂国土数据的专业人员使用。

weixin_28732953的博客 334

洛谷 P1622 释放囚犯【区间dp】

首先题目说了释放的人的所在牢房编号按递增的顺序给出,所以不需要在排序了,现在唯一影响吃肉数量的因素就是释放的顺序,先释放谁后释放谁的问题,对于一个区间[l,r],我们考虑最后一个释放的位置为k,那么释放k之后,就会形成俩个新的需要处理的区间f[l,k-1],f[k+1,r],这个不就是经典的区间dp了吗,然后我们考虑区间dp进行处理即可。现在正好牢房是满的。最后一步是处理k,a[r+1]-a[l-1]-1表示的是区间[l,r]数的个数,我们释放k,所以需要吃肉的数量为a[r+1]-a[l-1]-1-1。

lianxuhanshu_的博客 1263

Plecs电力电子仿真专业教程-第一季 补充课程 Plecs的安装教程与软件下载

PLECS4.1.64免安装版本–点我下载 Plecs.Standalone-3.7.2版本--关注加私信给我可以提供下载链接 补充课程 Plecs的安装教程与软件下载 详细介绍Plecs软件的安装过程

1万+

P1622 释放囚犯-区间DP

释放囚犯 - 洛谷 释放第一个囚犯的过程就是把整个区间分成两个子区间的过程,代价是两边人数和。而对于新形成的两个子区间,又可以按照类似方法实现划分。那么完全可以把整个过程倒过来,通过小区间合并来形成最终大区间即可。 预处理出来m个人分出来的m+1个区间,这些区间并不包含释放的人,我们枚举断点的时候还要算上断点之外,区间之外的人,也就是大区间拆分时还没释放的人; #include <iostream> # include<algorithm> using namespa

jisuanji2606414的博客 410

【OpenClaw从入门到精通】第73篇:30天OpenClaw实战挑战——从零搭建个人数字助理(Day15-21)万字超详细高阶实战版

经过前两周的基础部署与功能搭建,你已拥有可自动化干活的AI助理与数字员工团队,但距离“高阶精通”仍有差距。本文聚焦第三周(Day15-21)核心实战,围绕安全审计、语音能力接入、Token成本控制、Agent Loop优化、One-Liner指令五大核心模块,结合真实落地案例与踩坑经验,提供超详细实操指南。通过本文,你将掌握生产级安全加固方案、语音交互全流程配置、低成本高性价比使用策略、Agent自主闭环优化技巧,以及一句话搞定复杂任务的高效指令用法,同时完成中期复盘与最后九天冲刺规划

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 362

【cmd】Win10家庭版找不到 gpedit.msc (组策略)的解决方法

目录 一、创建cmd文件 二、以“管理员身份”运行“gpedit.cmd”文件 三、运行“gpedit.msc”命令查看组策略 一、创建cmd文件 (1)新建一个文件名为“gpedit.txt”的txt文本文档: (2)文本中写入以下内容: @echo off pushd "%~dp0" dir /b C:\Windows\servicing\Packages\Micros...

顾三殇 —— 博客空间(软件测试) 4万+

P1622 释放囚犯-动态规划,区间dp

Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外)。现在正好牢房是满的。 上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的P个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会很气愤,导致他们那天会一直大吼大叫,搞得看守很头疼。如果给这些要发火的人吃上肉...

LingFengGold 711

【教程4>第7章>第6节】基于FPGA的Viterbi维特比译码verilog实现——ACS加比选单元1

本文介绍了ACS加比选单元模块在FPGA中的实现过程,重点讲解了维特比译码中的ACS单元功能及其在硬件实现中的关键问题。文章首先概述了ACS单元在维特比译码中的作用,即通过计算和比较分支度量值来选择最优路径。接着,详细描述了FPGA实现中的分支度量值归一化处理策略,并指出了其存在的弊端。随后,文章提供了基于Verilog的ACS加比选单元模块代码,解释了其输入输出端口及工作流程。最后,总结了本小节内容,并预告了下一章节将涉及ACS顶层模块的开发与仿真测试。

FPGA/MATLAB学习教程/源码/项目合作开发 568

洛谷:P1622 释放囚犯

无论在这个区间上选谁释放,都会有一个 送肉“成本”= a[r + 1] - a[l - 1] - 2,因为当前选择的区间 [ l,r ]的含义是在a数组的闭区间 l下标与r下标之间选择一个人员编号进行释放,而 [ l,r ] 还有一个外围区间 [ a[l - 1], a[r + 1]]也就是上一次释放人员之后生成的子区间,就好比是例1中选择释放6号时,实际上是在14号释放之后的子区间 [0,13]上释放的,而[0,13]就是 a数组上区间 [1,2]的外围区间;仅一行,表示最少要给多少人次送肉吃。

xyk050216的博客 662

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

区间DP

ssllyr 319

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[洛谷]P1622 释放囚犯 (#区间dp)

题目描述 Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外)。现在正好牢房是满的。 上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的P个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会很气愤,导致他们那天会一直大吼大叫,搞得看守很头疼。如果给这些要发火...

A.pro的博客 400

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

洛谷 P1622 释放囚犯

题目传送门:https://www.luogu.com.cn/problem/P1622 转换为石子的合并问题。 区间DP+四边形优化。 #include<iostream> #include<set> using namespace std; const int MAXQ = 1005; const int INF = 0x7fffffff; int dp[MA...

qq_36915686的博客 308

区间dp——释放囚犯

原文链接:https://www.luogu.com.cn/problem/P1622 AC代码: #include<iostream> #include<string.h> #include<vector> #include<math.h> #include<algorithm> using namespace std; int p,...

qq_40892316的博客 213

洛谷1622释放囚犯 区间DP石子合并的变形

洛谷1622释放囚犯 题目描述 Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外)。现在正好牢房是满的。 上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的P个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会很气愤,导致他们那天会一直大吼大叫,搞得看守...

pxlsdz的博客 682

【洛谷】P1622 释放囚犯-区间dp

题目描述 Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外)。现在正好牢房是满的。 上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的P个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会很气愤,导致他们那天会一直大吼大叫,搞得看守很头疼。如果给这些要发火...

红点雷龙XL 687

释放囚犯(洛谷-P1622)

题目描述 Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外)。现在正好牢房是满的。 上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的P个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会很气愤,导致他们那天会一直大吼大叫,搞得看守很头疼。如果给这些要发火...

Alex_McAvoy的博客 1130

P1622 释放囚犯

P1622 释放囚犯 题目描述 Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外)。现在正好牢房是满的。 上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的P个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会很气愤,导致他们那天会一直大吼大叫...

weixin_30367169的博客 77

【区间DP】释放囚犯

貌似和石子合并差不多 可能是我见的题太少了,所以都差不多 OK 算法分析 首先不难看出这是一道区间DP,那么,按照本蒟蒻的意思 区间DP==三个循环 for(int len=2;len&lt;=n;len++) for(int l=1;l+len-1&lt;=n;l++) { int r=l+len-1; for(int k=...

zheng_lw的博客 432
上一篇: 洛谷P2623 物品选取【DP+混合背包】【黄】
下一篇: 洛谷P1650 田忌赛马【DP+贪心】【绿】
lppppppp666
博客等级 码龄7年 11粉丝 200原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值