虽然还是悬线法,但是这道题可不能轻易地套模板了,而是要换一种思路,横着扫一遍,竖着扫一遍,时间复杂度依旧是O(n^2),然而空间复杂度有一定的优化

如果用原来的方法,显然时间空间都会炸(如果你想用map我也没办法...时间换空间?)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define st short int
using namespace std;
inline int read(){
char chr=getchar(); int f=,ans=;
while(!isdigit(chr)) {if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)) {ans=(ans<<)+(ans<<);ans+=chr-'';chr=getchar();}
return ans*f;
}
void write(int x){
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}
struct P{int x,y;}a[];
int L,W,n,x,y,ans;
bool cmp1(const P &x,const P &y){return x.x<y.x||x.x==y.x&&x.y<y.y;}
bool cmp2(const P &x,const P &y){return x.y<y.y||x.y==y.y&&x.x<y.x;}
int main(){
L=read(),W=read(),n=read();
for(int i=;i<=n;i++)x=read(),y=read(),a[i]=(P){x,y};
a[++n]=(P){,},a[++n]=(P){,W},a[++n]=(P){L,},a[++n]=(P){L,W};
sort(a+,a+n+,cmp1);
for(int i=;i<=n;i++){
int le=,ri=W,cnt=i;
while(a[i].x==a[cnt].x) cnt++;
int j=cnt;
while(j<=n){
ans=max(ans,(a[j].x-a[i].x)*(ri-le));
if(a[j].y<=a[i].y) le=max(le,a[j].y);
else ri=min(ri,a[j].y);
++j;
}le=,ri=W,j=cnt;
while(j<=n){
ans=max(ans,(a[j].x-a[i].x)*(ri-le));
if(a[j].y<a[i].y) le=max(le,a[j].y);
else ri=min(ri,a[j].y);
++j;
}
}sort(a+,a+n+,cmp2);
for(int i=;i<=n;i++){
int le=,ri=L,cnt=i;
while(a[i].y==a[cnt].y) cnt++;
int j=cnt;
while(j<=n){
ans=max(ans,(a[j].y-a[i].y)*(ri-le));
if(a[j].x<=a[i].x) le=max(le,a[j].x);
else ri=min(ri,a[j].x);
++j;
}le=,ri=L,j=cnt;
while(j<=n){
ans=max(ans,(a[j].y-a[i].y)*(ri-le));
if(a[j].x<a[i].x) le=max(le,a[j].x);
else ri=min(ri,a[j].x);
++j;
}
}cout<<ans;
return ;
}

【DP悬线法】奶牛浴场的更多相关文章

  1. BZOJ 1057: [ZJOI2007]棋盘制作( dp + 悬线法 )

    对于第一问, 简单的dp. f(i, j)表示以(i, j)为左上角的最大正方形, f(i, j) = min( f(i + 1, j), f(i, j + 1), f(i + 1, j + 1)) ...

  2. P1169 [ZJOI2007]棋盘制作 DP悬线法

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8 \times 88×8大小的黑白相间的方阵,对应八八六十四卦,黑白 ...

  3. P4147 玉蟾宫 二维DP 悬线法

    题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...

  4. 【题解】洛谷P1169 [ZJOI2007] 棋盘制作(坐标DP+悬线法)

    次元传送门:洛谷P1169 思路 浙江省选果然不一般 用到一个从来没有听过的算法 悬线法: 所谓悬线法 就是用一条线(长度任意)在矩阵中判断这条线能到达的最左边和最右边及这条线的长度 即可得到这个矩阵 ...

  5. DP(悬线法)+二维前缀和【p2706】巧克力

    Background 王7的生日到了,他的弟弟准备送他巧克力. Description 有一个被分成n*m格的巧克力盒,在(i,j)的位置上有a[i,j]块巧克力.就在送出它的前一天晚上,有老鼠夜袭巧 ...

  6. DP(悬线法)【P1169】 [ZJOI2007]棋盘制作

    顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述-->p1169 棋盘制作 题目大意 给定一个01棋盘,求其中01交错的最大正方形与矩形. 解题思路: 动态规划---悬线法 以下内 ...

  7. 算法浅谈之DP悬线法

    悬线法 用途 解决给定矩阵中满足条件的最大子矩阵 做法 用一条线(横竖貌似都行)左右移动直到不满足约束条件或者到达边界 定义 \(left[i][j]\):代表从\((i,j)\)能到达的最左位置 \ ...

  8. [DP专题]悬线法

    参考:https://blog.csdn.net/twtsa/article/details/8120269 先给出题目来源:(洛谷) 1.p1387 最大正方形 2.P1169 棋盘制作 3.p27 ...

  9. [ZJOI2007]棋盘制作 悬线法dp 求限制下的最大子矩阵

    https://www.luogu.org/problemnew/show/P1169 第一次听说到这种dp的名称叫做悬线法,听起来好厉害 题意是求一个矩阵内的最大01交错子矩阵,开始想的是dp[20 ...

随机推荐

  1. Python 之多线程应用

    import socket from threading import Thread def recv_data(): while True: recv_info = udp_socket.recvf ...

  2. ES6 中set的用法

  3. altera quartus 百度云分享 quartus prime 17.1 16.1 13.0

    quartus prime 17.1 标准版 链接:https://pan.baidu.com/s/10QWejKdDobVxDSqnVPJ0xQ 提取码:hhvj 复制这段内容后打开百度网盘手机Ap ...

  4. BZOJ 2442: [Usaco2011 Open]修剪草坪 单调队列

    Code: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm& ...

  5. vue项目的路由配置

    方案一.在生成项目的时候就选择安装路由; 这个地方选择y即可; 生成项目之后在src目录下会有router文件夹,里面有index.js,并且里面已经存在一个helloWorld页面了,可以直接模仿着 ...

  6. 小实例 hangman game

    代码 #include <bits/stdc++.h> using namespace std; int bk[110]; string sj(int t) { string ans=&q ...

  7. namespace的作用及用法

    namespace 所谓namespace,是指标识符的可见范围.C++标准库中的所有标识符都被定义在一个名为 std 的namespace 中. 一.<iostream>和<ios ...

  8. 65.dynamic mapping

    主要知识点: 理解dynamic mapping 定制dynamic mapping 更改default dynamic mapping     一.理解dynamic mapping 1.基本概念 ...

  9. nyoj_524_A-B Problem_201312012035

    A-B Problem 时间限制:1000 ms  |           内存限制:65535 KB 难度:3   描述 A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧. ...

  10. hibernate之单表映射

    目录 第一章 Hibernate初识 1-1 课程介绍 1-2 什么是ORM 1-3 Hibnerate简介 1-4 开发前的准备 1-5 编写第一个Hibernate例子 1-6 创建hiberna ...