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的更多相关文章

  1. 汕头市队赛 SRM10 T1模拟只会猜题意

    模拟只会猜题意 SRM 10 描述 有一本n个单词的词典,求按下列方法能造出的不相同的词汇数目.  1.词典中的单词是一个词. 2.能分为两部分的,其中前一部分是一个词典词或者其非空前缀,后一部分是一 ...

  2. 汕头市队赛 SRM10 T3 数学上来先打表

    数学上来先打表 SRM 10 描述 给出 n个点(不同点之间有区别),求出满足下列条件的连边(双向边)方案:1.每条边连接两个不同的点,每两个点之间至多有一条边2.不存在三个点a,b,c使三个点间两两 ...

  3. 汕头市队赛 SRM10 T1 贪心只能过样例

    贪心只能过样例 SRM 10 描述 给出n个数a[i](1<=a[i]<=n),问最多能把这些数分成几组,使得每个数a[i]所在的组至少有a[i]个数 输入格式 第一行一个整数n,接下来n ...

  4. 【STSRM10】dp只会看规律

    [算法]区间DP [题意]平面上有n个点(xi,yi),用最少个数的底边在x轴上且面积为S的矩形覆盖这些点(在边界上也算覆盖),n<=100. [题解]随机大数据下,贪心几乎没有错误,贪心出奇迹 ...

  5. 汕头市队赛 C KMP codeforces B. Image Preview

    汕头市队赛题目传送门 codeforces题目传送门 这道题我的做法是 尝试先往左走然后往右走 或者先往右走然后往左走 然后注意一下枚举顺序就okay啦 #include<cstdio> ...

  6. 汕头市队赛 SRM16 T2

    描述 猫和老鼠,看过吧?猫来了,老鼠要躲进洞里.在一条数轴上,一共有n个洞,位置分别在xi,能容纳vi只老鼠.一共有m只老鼠位置分别在Xi,要躲进洞里,问所有老鼠跑进洞里的距离总和最小是多少. 输入格 ...

  7. {CodeForces】788E New task && 汕头市队赛SRM06 D 五色战队

    D 五色战队 SRM 06 背景&&描述         游行寺家里人们的发色多种多样,有基佬紫.原谅绿.少女粉.高级黑.相簿白等.         日向彼方:吾令人观其气,气成五彩, ...

  8. 汕头市队赛 C SRM 05 - YYL 杯 R1 T3!

    C SRM 05 - YYL 杯 R1 背景 tjmak 描述 给一个大小为n的序列V.序列里的元素有正有负.问至少要删除多少个元素使得序列里不存在区间(要求非空)和 >= S.如果答案大于m, ...

  9. 汕头市队赛 SRM 06 A 撕书

    A 撕书 SRM 06 背景&&描述 游行寺汀正在杀书.         书总共有n页,每页都可以看作是一个小写英文字母,所以我们可以把书看成长度为n的字符串s.         琉璃 ...

随机推荐

  1. 转:CentOS7 下 Redis4 安装与配置教程(Redis开机启动)

    转 https://ken.io/note/centos7-redis4-setup 一.前言 1.本教程主要内容 Redis安装与测试 Redis远程访问配置 Redis开机启动配置 2.本教程环境 ...

  2. Mysql--select基础查询

    基本语法:select 查询列表 from 表名 查询列表可以是表中字段.常量值.表达式.函数:查询的结果是一个虚拟的表格. 注意: ①sql语言大小写不敏感 ②关键字不能分行或略写 ③一般书写方式为 ...

  3. Cisco交换机与路由器命令总结

    1.查看信息 show version    查看版本及引导信息 show running-config     查看运行设置 show startup-config     查看开机设置 show ...

  4. 「微信小程序免费辅导教程」25,基本内容组件text的使用及个人帐号允许的服务类目

  5. golang echo livereload

    echo on port 1323 gin -a 1323 run server.go go get github.com/codegangsta/gin gin -h

  6. KNN算法python实现小样例

    K近邻算法概述优点:精度高.对异常数据不敏感.无数据输入假定缺点:计算复杂度高.空间复杂度高适用数据范围:数值型和标称型工作原理:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签 ...

  7. 继承Thread类使用多线程

    java实现多线程有两种方式,一种是继承Thread类,另外一种就是实现Runnable接口. 两种实现方法的优缺点: 使用Thread类实现多线程局限性就是不支持多继承,因为java是不支持类多继承 ...

  8. vue/vux编译时出现 unexpected token <11:0-485>

    最近开发Vux项目,一直使用VS Code开发工具,可以格式化里面的<script>代码的: 但是今天突然无法格式化代码,而且编译报错.主要提示类似:unexpected token  & ...

  9. 【LoadRunner】利用lr_db_connect函数对Oracle数据库压测的完整流程

    项目中常常会有直接对数据库进行压测的需求,以前都是通过Jmeter实现的,但是Jmeter本身图表及结果收集方面没有Loadrunner那么强大,所以利用loadrunner工具自己的函数整理了一个脚 ...

  10. sqlserver2008链接服务器中执行存储过程配置过程

    参考:http://www.cnblogs.com/ycsfwhh/archive/2010/12/15/1906507.html 1.双方启动MSDTC服务MSDTC(分布式交易协调器),协调跨多个 ...