P1622释放囚犯
这是一道绿题,是一道让人想用贪心但却是区间DP的题目,难倒了我这个蒟蒻。
这个题其实仔细观察是类似于石子合并的!合并石子的代价便是肉的数量,求最小代价。所以我们设dp[i][j]为释放第i个到第j个所花费的代价,先用sum[i]求出每一个节点(犯人1与起点间的人数,犯人i+1与犯人i间的人数,终点与犯人q间的人数,也就是前缀和(还要-1)然后进行区间DP。首先枚举区间的长度,嵌套枚举区间的起点,那么区间的终点便可以得到,然后令dp[i][j]=0xfffffff后枚举分割点,看先释放哪个囚犯更好。于是得出状态转移方程dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]+j-i-1;
1.看到一个题后,想是否万变不离模板题
2.区间DP处理好前缀和或者后缀和,勿漏情况
3.注意第j个与第i个间有j-1-1人
4.状态转移方程写全面,可以代入验证正确性,也别光按照原理判断
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#define N 1005
using namespace std;
int dp[N][N];
int p,q;
int a[N]={},sum[N]={};
int main(){
scanf("%d%d",&p,&q);
for(int i=;i<=q;i++){
scanf("%d",&a[i]);
}
a[]=;
a[++q]=p+;
sort(a,a++q);
for(int i=;i<=q;i++){
sum[i]=a[i]-a[i-]-+sum[i-];//前缀和,代表它前面需要有几个不放给多少个肉
//cout<<sum[i]<<endl;
}
for(int l=;l<=q;l++){//枚举长度
for(int i=;i+l-<=q;i++){//枚举起点
int j=i+l-;
dp[i][j]=0xffffff;
for(int k=i;k<j;k++){//枚举分割点
if(dp[i][j]>dp[i][k]+dp[k+][j]+sum[j]-sum[i-]+j-i-){
dp[i][j]=dp[i][k]+dp[k+][j]+sum[j]-sum[i-]+j-i-;
//j-i-1代表需要释放但还没释放的人的代价
}
}
}
}
printf("%d",dp[][q]);
return ;
}
P1622释放囚犯的更多相关文章
- P1622 释放囚犯
传送门 区间DP简介: 在写这题前,需要先弄清楚区间DP是如何操作的: 区间DP的做法还是相对固定的,没有其他类型DP的复杂多变.主要思想就是先在小区间进行DP得到最优解,然后再利用小区间的最优解合并 ...
- luogu P1622 释放囚犯
题目描述 Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外).现在正好牢房是满的. 上级下发了一个释放名单,要求每天释放名单上的一个人. ...
- 洛谷P1622 释放囚犯
题目描述 Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外).现在正好牢房是满的. 上级下发了一个释放名单,要求每天释放名单上的一个人. ...
- 洛谷P1622释放囚犯
题目: 这个题很明显是一个区间DP,但是比较不同的是,这个题它很像区间DP的经典题——石子合并. 然后我傻傻的搞了这个题搞了一下午,然后几乎看遍了全网的题解,就只看懂了这个方法,可能是我太菜了吧,但是 ...
- 【区间DP】释放囚犯
貌似和石子合并差不多 可能是我见的题太少了,所以都差不多 OK 算法分析 首先不难看出这是一道区间DP,那么,按照本蒟蒻的意思 区间DP==三个循环 for(int len=2;len<=n;l ...
- 贿赂囚犯 Bribe the prisoners ( 动态规划+剪枝)
一个监狱里有P个并排着的牢房,从左往右一次编号为1,2,-,P.最初所有牢房里面都住着一个囚犯.现在要释放一些囚犯.如果释放某个牢房里的囚犯,必须要贿赂两边所有的囚犯一个金币,直到监狱的两端或者空牢房 ...
- 【网易官方】极客战记(codecombat)攻略-地牢-囚犯
关卡连接: https://codecombat.163.com/play/level/the-prisoner 解放囚犯,你会得到盟友. 简介 敬请期待! 默认代码 # 释放囚犯,击败守卫并夺取宝石 ...
- DP の 百题大过关(5/100)
动态规划自古以来是DALAO凌虐萌新的分水岭,但有些OIer认为并没有这么重要--会打暴力,大不了记忆化.但是其实,动态规划学得好不好,可以彰显出一个OIerOIer的基本素养--能否富有逻辑地思 ...
- 【Java并发编程实战】----- AQS(二):获取锁、释放锁
上篇博客稍微介绍了一下AQS,下面我们来关注下AQS的所获取和锁释放. AQS锁获取 AQS包含如下几个方法: acquire(int arg):以独占模式获取对象,忽略中断. acquireInte ...
随机推荐
- 【leetcode】1189. Maximum Number of Balloons
题目如下: Given a string text, you want to use the characters of text to form as many instances of the w ...
- IntelliJ IDEA 2019.3激活破解教程(亲测有效,可激活至 2089 年)
IntelliJ IDEA 2019.3激活破解教程(亲测有效,可激活至 2089 年) 所有软件安装位置,作者均在无中文.无空格目录下进行操作的 IntelliJ IDEA 2019.3激活破解教程 ...
- 阿里云移动研发平台 EMAS 助力银行业打造测试中台,提升发版效能
随着移动互联网的发展,手机银行凭借低成本.操作简单.不受时间空间约束等优势,正逐步替代传统的网银交易方式.越来越多的银行开始了“业务移动化”转型之路,“手机APP”已经成为企业价值传递和关系维护的关键 ...
- 一些 sql 调优的总结
一.sql 优化方案 1)列类型尽量定义成数值类型,且长度尽可能短,如主键和外键,类型字段等等 2)建立单列索引 3)根据需要建立多列联合索引.当单个列过滤之后还有很多数据,那么索引的效率将会 ...
- node.js入门学习(二)MIME模块,request和response对象,demo之不同url请求不同html页面,页面包含图片、样式css等静态资源
一.构建http服务程序-根据不同请求做出不同响应 // 加载http模块 var http = require("http"); // 创建一个http服务对象 http.cre ...
- PWM 定义
简单的说,比如你有5V电源,要控制一台灯的亮度,有一个传统办法,就是串联一个可调电阻,改变电阻,灯的亮度就会改变.还有一个办法,就是PWM调节.不用串联电阻,而是串联一个开关.假设在1秒内,有0.5秒 ...
- Spring Cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)
上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的 ...
- sqli-labs29-31关Background-6 服务器(两层)架构
首先介绍一下29,30,31这三关的基本情况: 服务器端有两个部分:第一部分为tomcat为引擎的jsp型服务器,第二部分为apache为引擎的php服务器,真正提供web服务的是php服务器.工作流 ...
- wannafly 练习赛10 f 序列查询(莫队,分块预处理,链表存已有次数)
链接:https://www.nowcoder.net/acm/contest/58/F 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 262144K,其他语言524288K 64 ...
- [nginx] CORS配置多域名
如下 server { listen 80; server_name www.your.com; root /data/web/www.your.com; access_log /var/log/ng ...