汕头市队赛 SRM10 dp只会看规律 && bzoj1766
dp只会看规律 SRM 10
描述
平面上有n个点(xi,yi),用最少个数的底边在x轴上且面积为S的矩形覆盖这些点(在边界上也算覆盖)
输入格式
第一行两个整数n,S
接下来n行每行两个整数xi,yi,表示点的坐标
输出格式
一行,一个整数,表示答案
样例输入
6 4
5 1
4 1
7 1
6 4
5 4
2 1
样例输出
3
数据范围与约定
n=3,1组数据
n=5,1组数据
n=11,1组数据 
n=15,1组数据 
n=18,1组数据
18<n<=100,7组数据 
对于所有的数据,
1<=n<=100
0<=xi<=3000000
1<=yi<=S
1<=S<=200000
样例解释
这里给出一种方案,每行为一个矩形:
1<=x<=3,0<=y<=2
3<=x<=7,0<=y<=1
5<=x<=6,0<=y<=4
————————————————————————————
这道题状压dp有四十分QAQ orzzsn
正解是一波dp
通过画图可知 两个矩形之间的关系 除了互不相交就是互相包含
并且互相包含的情况 中间的高度必须大于x长度比他大的
这样我们就可以枚举左右区间以及高度(高度从大到小)
当然我们要先给 x y 离散化降低一波复杂度 这个时候的复杂度才能做到n^4
当然如果一个 l r 的组合中他的左右边界上不存在点 我们可以强行挪到点上 这可以作为一波剪枝
dp的时候注意h比较小的区间 l r 要包含或者等于h比他大的区间 这样才能保证正确性
这样我们可以每一层类似递归的处理下去 判断一下两种情况 就可以做辣
f【l】【r】【h】表示左右端点为 l r 高度为 h 的区间覆盖所有点的最小答案
xd表示当前 l r 的区间长度 hh是区间的最大高度
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=,inf=0x3f3f3f3f;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
struct node{int x,y;}e[M];
bool cmp(node a,node b){return a.x<b.x;}
int yy[M],xl[M],xr[M],n,m,S,f[M][M][M];
void maxs(int& x,int y){if(x<y) x=y;}
void mins(int& x,int y){if(x>y) x=y;}
int main()
{
n=read(); S=read();
for(int i=;i<n;i++) e[i].x=read(),e[i].y=read(),yy[i]=e[i].y;
sort(e,e+n,cmp);
sort(yy,yy+n);
m=unique(yy,yy+n)-yy;
for(int i=;i<n;i++) e[i].y=lower_bound(yy,yy+m,e[i].y)-yy;
for(int r=;r<n;r++)
for(int l=r;l>=;l--){
int xd=e[r].x-e[l].x;
int hh=xd?upper_bound(yy,yy+m,S/xd)-yy:m;
for(int h=;h<m;h++) xl[h]=inf,xr[h]=-inf;
for(int k=l;k<=r;k++) mins(xl[e[k].y],k),maxs(xr[e[k].y],k);
for(int k=m-;k>=;k--) mins(xl[k],xl[k+]),maxs(xr[k],xr[k+]);
for(int h=m-;h>=;h--){
if(xl[h]==l&&xr[h]==r){
int& F=f[l][r][h];
F=inf;
if(h<hh) mins(F,f[l][r][hh]+);
for(int k=l;k<r;k++) mins(F,f[l][k][h]+f[k+][r][h]);
}else if(xl[h]<=xr[h]) f[l][r][h]=f[xl[h]][xr[h]][h];
}
}
printf("%d\n",f[][n-][]);
return ;
}
汕头市队赛 SRM10 dp只会看规律 && bzoj1766的更多相关文章
- 汕头市队赛 SRM10 T1模拟只会猜题意
		模拟只会猜题意 SRM 10 描述 有一本n个单词的词典,求按下列方法能造出的不相同的词汇数目. 1.词典中的单词是一个词. 2.能分为两部分的,其中前一部分是一个词典词或者其非空前缀,后一部分是一 ... 
- 汕头市队赛 SRM10 T3 数学上来先打表
		数学上来先打表 SRM 10 描述 给出 n个点(不同点之间有区别),求出满足下列条件的连边(双向边)方案:1.每条边连接两个不同的点,每两个点之间至多有一条边2.不存在三个点a,b,c使三个点间两两 ... 
- 汕头市队赛 SRM10 T1  贪心只能过样例
		贪心只能过样例 SRM 10 描述 给出n个数a[i](1<=a[i]<=n),问最多能把这些数分成几组,使得每个数a[i]所在的组至少有a[i]个数 输入格式 第一行一个整数n,接下来n ... 
- 【STSRM10】dp只会看规律
		[算法]区间DP [题意]平面上有n个点(xi,yi),用最少个数的底边在x轴上且面积为S的矩形覆盖这些点(在边界上也算覆盖),n<=100. [题解]随机大数据下,贪心几乎没有错误,贪心出奇迹 ... 
- 汕头市队赛 C KMP codeforces B. Image Preview
		汕头市队赛题目传送门 codeforces题目传送门 这道题我的做法是 尝试先往左走然后往右走 或者先往右走然后往左走 然后注意一下枚举顺序就okay啦 #include<cstdio> ... 
- 汕头市队赛 SRM16 T2
		描述 猫和老鼠,看过吧?猫来了,老鼠要躲进洞里.在一条数轴上,一共有n个洞,位置分别在xi,能容纳vi只老鼠.一共有m只老鼠位置分别在Xi,要躲进洞里,问所有老鼠跑进洞里的距离总和最小是多少. 输入格 ... 
- {CodeForces】788E New task && 汕头市队赛SRM06 D 五色战队
		D 五色战队 SRM 06 背景&&描述 游行寺家里人们的发色多种多样,有基佬紫.原谅绿.少女粉.高级黑.相簿白等. 日向彼方:吾令人观其气,气成五彩, ... 
- 汕头市队赛 C SRM 05 - YYL 杯 R1 T3!
		C SRM 05 - YYL 杯 R1 背景 tjmak 描述 给一个大小为n的序列V.序列里的元素有正有负.问至少要删除多少个元素使得序列里不存在区间(要求非空)和 >= S.如果答案大于m, ... 
- 汕头市队赛 SRM 06 A 撕书
		A 撕书 SRM 06 背景&&描述 游行寺汀正在杀书. 书总共有n页,每页都可以看作是一个小写英文字母,所以我们可以把书看成长度为n的字符串s. 琉璃 ... 
随机推荐
- SAP后台JOB的Submit & EVENT JOB
			SM35执行一个后台作业后,想及时停止, 运行SM37后,点击ctr + F1停止活动的作业,系统根本就没反应. 解决方法: 第一步:SM50, 找到,Ty.列为BGD的(Background),然后 ... 
- 52shaidan.net
			52shaidan.net 52gendan.net 朋友的域名 
- Linux运维常用命令详解
			1.ls 文件属性: -:普通文件 d:目录文件 b:块设备 c:字符设备文件 l:符号连接文件 p:命令管道 s:套接字文件 文件权限: 9位数字,每3位一组 文件硬链接次数 文 ... 
- HTTP-点开浏览器输入网址背后发生的那点事
			前言 Internet最早来源于美国国防部ARPANet,1969年投入运行,到现在已有很长一段路了,各位想要了解发展史可以百度下,这里就不多说了. 现如今当我们想要获取一些资料,首先是打开某个浏览器 ... 
- HDU 1423 Greatest Common Increasing Subsequence(LCIS)
			Greatest Common Increasing Subsequenc Problem Description This is a problem from ZOJ 2432.To make it ... 
- 10.VUE学习之使用lodash库减少watch对后台请求的压力
			问题描述 使用watch监听库里word的值的变化,获取新值后,用oxios发送的ajax异步请求, 此时会多次发送请求,浪费服务器资料. 解决办法 使用lodash库里的_.debounce函数延缓 ... 
- kubernetes dashboard permission errors
			kubernetes dashboard 的权限错误 warning configmaps is forbidden: User "system:serviceaccount:kube-sy ... 
- 4Sum II
			https://leetcode.com/submissions/detail/153740275/ class Solution { public: int fourSumCount(vector& ... 
- 三次样条插值matlab实现
			三次样条插值matlab实现 %三次样条差值-matlab通用程序 - zhangxiaolu2015的专栏 - CSDN博客 https://blog.csdn.net/zhangxiaolu201 ... 
- [BZOJ1503]郁闷的出纳员(Splay)
			Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ... 
