P4890 Never·island(dp)
求门开的最小时间,其实也就是求门关的最大时间。
坐标这么大....显然坐标要离散化
离散化排序后,我们发现x轴被这些点划分成若干条线段$(l,r)$,并且有4种情况
我们用$v[i]$数组表示给队$i$钥匙的贡献
1.左端点为$i$队的起点,右端点为$i$队的终点:显然队$i$钥匙的贡献包括这一段,$v[i]+=r-l$
2.左端点为$i$队的终点,右端点为$j$队的起点:无论如何分配钥匙,这一段都可以关门,于是答案可直接算上$r-l$
3.左端点为$i$队的终点,右端点为$j$队的终点:如果我们给$j$队钥匙,$i$队就可以关门,$v[j]+=r-l$
4.左端点为$i$队的起点,右端点为$j$队的终点:我们只有给$i,j$各一把钥匙,才能算上这一段的贡献
于是我们就在$i,j$之间先连边,边权为$r-l$
蓝后我们又发现,这些点由一些互不相干的链组成。
于是我们按$x轴$从左到右dfs一遍求出dp的优先顺序
最后我们用$f[i][j][0/1]$表示前$i$个点,已给$j$个点钥匙,是否选择了第$i$个(当前)点的最优解
这就是一个二维dp辣
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define rint register int
using namespace std;
inline int Max(int a,int b){return a>b?a:b;}
inline int Min(int a,int b){return a<b?a:b;}
void read(int &x){
char c=getchar();x=;
while(c<''||c>'') c=getchar();
while(''<=c&&c<='') x=x*+(c^),c=getchar();
}
#define N 4005
int n,m,pos[N],tp,h[N],nxt[N],v[N],sv[N];
int f[N][N][],tot; bool vis[N];
map <int,int> mp;
void dfs(int x){vis[h[++tp]=x]=; if(nxt[x])dfs(nxt[x]);}
int main(){
read(n);read(m); int l,r,L,R,tn=n<<;
for(rint i=;i<=n;++i){
read(l), read(r);
pos[i]=l, pos[i+n]=r;
mp[l]=i<<, mp[r]=i<<|;
}sort(pos+,pos+tn+);//离散化
for(rint i=;i<tn;++i){
l=pos[i], r=pos[i+];
L=mp[l], R=mp[r];
if((L&)&&(R&)) v[R>>]+=r-l;
if((L&)&&!(R&)) tot+=r-l;
if(!(L&)&&!(R&)) v[L>>]+=r-l;
if(!(L&)&&(R&)){
if((L>>)==(R>>)) v[L>>]+=r-l;
else nxt[R>>]=L>>,sv[R>>]=r-l;
}
}
for(rint i=;i<=tn;++i){
int p=mp[pos[i]];
if(!(p&)&&!vis[p>>]) dfs(p>>);
}//dfs确定dp顺序
memset(f,0xbf,sizeof(f));//-inf
f[n+][][]=;
for(rint i=n;i;--i){
f[i][][]=;
for(rint j=Min(n-i+,m);j;--j){
f[i][j][]=Max(f[i+][j][],f[i+][j][]);
f[i][j][]=Max(f[i+][j-][],f[i+][j-][]+sv[h[i]])+v[h[i]];
}
}printf("%d",pos[tn]-pos[]-tot-Max(f[][m][],f[][m][]));
return ;
}
P4890 Never·island(dp)的更多相关文章
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
- Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)
Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...
- 最长公共子序列长度(dp)
/// 求两个字符串的最大公共子序列长度,最长公共子序列则并不要求连续,但要求前后顺序(dp) #include <bits/stdc++.h> using namespace std; ...
随机推荐
- JS 8-2 再谈原型
var bosn = new Student创建了Student的实例bosn.bosn的原型(__proto__)指向构造器Student的prototype属性. Student.prototyp ...
- 常用的Lunix命令 记录
使用normal模式下的 v命令,进入visual模式,v+ j/k/h/l 进行文本选中 对于选中的文本进行如下按键: (1.1)d ------ 剪切操作 (1.2)y ------ ...
- 20165321 学习基础与C语言学习心得
一.技能学习 我其实在小时候学过挺多东西,在我小学的时候,我曾经短时间地学过小提琴.拉丁舞.国画.书法,但是,由于各种原因,都没有继续学习下去.后来,在我小学四年级的时候,我接触到了二胡,于是,我开始 ...
- UVA 10256 The Great Divide(点在多边形内)
The Great Divid [题目链接]The Great Divid [题目类型]点在多边形内 &题解: 蓝书274, 感觉我的代码和刘汝佳的没啥区别,可是我的就是wa,所以贴一发刘汝佳 ...
- java生成随机六位数的验证码&随机生成十位数ValidCode码,用于邮件的验证&检查是不是符合为合法的中国的手机号码
package com.demo.test1; import java.security.NoSuchAlgorithmException; import java.security.SecureRa ...
- struts2实现XML异步交互
异步交互,在不用重新提交整个页面的情况下可以实现页面局部信息与服务器的交互.在编写异步交互时需要用到一个架包:dom4j,下载地址为:https://dom4j.github.io/ 下面通过例子说明 ...
- 第二章 CSS基本属性
1.CSS:层叠样式表 一个元素允许同时应用多种样式,页面元素最终的样式即为多种样式的叠加效果. 2.CSS样式优先级 行内样式表>内部样式表>外部样式表[就近原则] id选择器>类 ...
- 在caffe-ssd的环境搭建中遇到报错信息:Makefile:588: recipe for target '.build_release/cuda/src/caffe/layers/softmax_loss_layer.o' failed
错误原因: 1.计算机没有安装GPU 2.有GPU但是NVCCFLAGS设置错误 解决方法: 1.对没有GPU的计算机,需要将Makefile中的CPU之前的#注释去掉,是的caffe运行的处理器进行 ...
- 54. Spiral Matrix(剑指offer 19)
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
- MD5解密
国外http://md5.rednoize.com/http://www.milw0rm.com/md5/list.php国内http://www.neeao.com/md5/http://www ...