监狱
题目描述
有一座监狱,有N个牢房,N个牢房呈一字排成一排的。也就是说,第i个牢房紧挨着第i+1个(除了末尾那个)。每个牢房里都关押着一名罪犯,总共N名罪犯。
    上级要求将某些罪犯释放,给了一份名单,要求每天释放一个人。
    位于相邻牢房的罪犯,他们互相之间可以谈话也可以传话,这就使得这里的N名罪犯都可以相互聊天。如果有一个人离开了,那么能和说他上话的人就会很狂躁。如果想让他们安静下来,看守必须给狂躁的人吃一顿火锅。但看守们希望送火锅的次数越少越好。请你计算需要送火锅的次数。
123
输入格式
第一行两个数N和M,M表示要释放名单上的人数;
第二行M个数,表示释放哪些人
12
输出格式
仅一行,表示最少要给多少人次送火锅吃。
1
样例输入
20 3
3 6 14
12
样例输出
35
这道题我真的是想了很久QAQ
开先打了个70 分算法
一直纠结 O(m^3) 算法
网上找了好久 题解也看了 很多 终于悟出了一些小细节
方法一:
定义 f[i][j] 表示 i 到 j 号 囚犯已经被释放
注意 是被释放的囚犯 
所以 对于 每一个小区间的状态都是 于原区间一样 
那么i号释放的代价 为 他左右两边 的没有释放资格的囚犯数
所以枚举断点 k
K 将 i 到 j 分成 区间 [i,k-1] [k+1,j]  对于每个区间 都已经被算好了 k 就是第一个来更新 [i,j]的 才会 把 [i,j] 分成两个独立的区间
所以代价为 a[j+1]-a[i-1]-2 (这里想了很久,其实想想也是  对于区间 [i,j] 是释放囚犯的集合 他其实包含了没有释放资格的囚犯 a[j+1]-a[i-1]-2 是 i-
1号释放囚犯 和 j+1 号释放囚犯间的 人数)
-2? 因为 自己不更新 
所以我们有状态转移方程 
f[i][j]=min(f[i][j],f[i][k-1]+f[k+1][j]+a[j+1]-a[i-1]-2);
时间复杂度 O(M^3)
某ruan姓同学思路:
枚举k∈[i,j],k是区间[i,j]内第一个被放出去的囚犯,这个区间内本来有a[j+1]-a[i-1]-1个囚犯,放出去一个之后剩下a[j+1]-a[i-1]-2个囚犯都要吃火锅

然后区间[i,j]被分成了[i,k-1]和[k+1,j]

因为第k个囚犯被放出去了

code:
//
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
#define maxnn 4002
int f[maxnn][maxnn];
int n,m;
int a[101];
int s[maxnn][maxnn];
int sum[maxnn];
int res[maxnn];
int main()
{cin>>n>>m;for(int i=1;i<=m;i++){cin>>a[i];}sort(a+1,a+1+m);a[m+1]=n+1;for(int i=m;i>=1;i--)for(int j=i;j<=m;j++){    f[i][j]=1e9;for(int k=i;k<=j;k++)f[i][j]=min(f[i][k-1]+f[k+1][j]+a[j+1]-a[i-1]-2,f[i][j]);}cout<<f[1][m];
}

至于为甚么 a[m+1]=n+1;因为 n节点不是一个有释放资格的囚犯

方法2:
f[i][j]表示将第i个区间到第j个区间的人全部合并的最小代价
那么对于f[i][j],我们就可以枚举中间区间mid
那么f[i][j]的求值表达是就是
f[i][j]=min(f[i][j],f[i][mid]+f[mid+1]][j]+sum[j]-sum[i-1]-2){其中i<=mid<j}
解释一下
f[i][mid]+f[mid+1][j]表示的是之前进去的人请吃的火锅
sum[j]-sum[i-1]-1表示的是这一整段区间的人数之和
因为请吃火锅的这个人本身不吃,所以还要-1
得到==>f[i][mid]+f[mid+1][j]+sum[j]-sum[i-1]-2
合并区间!!  式子+代价
https://blog.csdn.net/qq_37920580/article/details/77936432

转载于:https://www.cnblogs.com/OIEREDSION/p/11279740.html

B监狱 noip 模拟 7.29(区间DP)相关推荐

  1. 8.22 NOIP模拟测试29(B) 爬山+学数数+七十和十七

    T1 爬山 二分最高高度,$O(1)$判断是否可行. #include<iostream> #include<cstdio> #define ll long long usin ...

  2. 【NOIP模拟题】【DP】【LIS】【中缀表达式】2016.11.15 第一题 小L的二叉树 题解

    小L的二叉树 小L的二叉树 题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. [题目描述] 在计算机科学中,二 ...

  3. 不死的LYM NOIP模拟 二分+状压DP

    一共也就7种课,第7种可以贪心地选择一定睡觉以换取答案的最小值. 那么我们就只剩下六种课需要讨论,状态压缩一下[当前的课之前睡过哪些课]即可. 本题要在二分的check内写DP,用二分出来的疲劳极限作 ...

  4. 【NOIP模拟题】【DP】【同余最短路】【暴力剪枝】2016.11.15 第二题 小L的牛栏 题解

    小L的牛栏 [题目描述] 小L通过泥萌的帮助,成功解决了二叉树的修改问题,并因此写了一篇论文, 成功报送了叉院(羡慕不?).勤奋又勤思的他在研究生时期成功转系,考入了北京大学光华管理学院!毕业后,凭着 ...

  5. NOIP模拟测试29「爬山·学数数·七十和十七」

    爬山题解不想写了 学数数 离散化然后找到以每一个值为最大值的连续子段有多少个,然后开个桶维护 那么怎么找以每一个值为最大值的连续子段个数 方法1(我的极笨的方法) 考试时我的丑陋思路, 定义极左值为左 ...

  6. 【2018.3.17】模拟赛之二-ssl1862jzoj1366 删数【区间dp】

    正题 链接 需要纪中OJ账号 有n个数,可以选择删除一段区间,价值为|xi – xk|*(k-i+1).求删完所有数的最大价值 输入输出(需要自取) Input 输入文件的第一行为一个正整数N,第二行 ...

  7. [模拟/区间DP]Csp M4 T1T2T4

    目录 A.[模拟]数鸭子 题意 样例 样例输入: 样例输出: 思路 总结 代码 B.[模拟]宇宙射线 题意 样例 样例输入: 样例输出: 思路 总结 代码 C.[区间DP]危机 题意 样例 样例输出: ...

  8. 计蒜客 2020 蓝桥杯省赛 B 组模拟赛(五)E区间dp H 裴蜀 J dp A-J 权值线段树

    题目链接 因为要去笔试.所以只打了两个小时,有点求快,很多细节没写好就匆匆交,而且没有检查,打的有点菜 C-煎牛排 做法: 所有的面的个数sum=2*n   然后sum/(2*k)即可. ans=ma ...

  9. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

最新文章

  1. liunx导出mysql慢查询日志查看_查看 MySQL 慢查询日志文件-问答-阿里云开发者社区-阿里云...
  2. 【加速实践】番外篇:numbajit
  3. redis的关键路径和lazy-free
  4. 江苏计算机三级偏软怎么学,计算机三级偏软
  5. VM虚拟机 安装OS X 错误vcpu-0:VERIFY vmcore/vmm/main/physMem_monitor.c:1123
  6. pycharm配置python第三方库_解决pycharm每次新建项目都要重新安装一些第三方库的问题...
  7. 轻重搭配 模拟 贪心
  8. 火山PC后台操作第三方窗口案例
  9. 帆软报表Tomcat 发布部署
  10. WebAssembly系列2-为什么我们需要WebAssembly—采访Brendan Eich
  11. ARM体系结构与编程学习(七)
  12. Linux文件系统:ext2/ext3
  13. 成功解决AttributeError: ‘Series‘ object has no attribute ‘split‘
  14. ResponseEntity总结
  15. 开放式激光振镜+运动控制器(三):振镜矫正
  16. 推荐(笔记软件、日程安排软件)
  17. 基于JAVA SSM框架的学校家长互动学习平台
  18. intel parallel studio xe 2020 Update 4
  19. 2010-2020年和讯网分省份社会责任数据
  20. Intel IPP 之图像压缩编码

热门文章

  1. python怎么安装scrapy_python2.7安装Scrapy
  2. pdf阅读器下载支持win7_福昕PDF阅读器(Foxit Reader)下载|福昕PDF阅读器(Foxit Reader) 9.6.1.25160 官方版...
  3. iw linux交叉编译,iw交叉编译
  4. copy所有的java文件到硬盘_将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad...
  5. 三极管工作原理_4种集电极-基极负反馈式三极管偏置电路的工作原理分析
  6. python自动化工具开发_初识TPOT:一个基于Python的自动化机器学习开发工具
  7. go mysql 数据 json,golang查询数据返回json
  8. 【mybatis】 “if“ 相关联的 “test“ 属性值不能包含 ‘<‘ 字符
  9. linux 压缩文件夹的一部分
  10. 单片机最小系统硬件电路图_经验分享:学单片机,51通则百通