虽然还是悬线法,但是这道题可不能轻易地套模板了,而是要换一种思路,横着扫一遍,竖着扫一遍,时间复杂度依旧是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. 小程序 之picker-view省市县

    代码地址:https://github.com/yangsphp/area-picker

  2. vsftpd:500OOPS:vsftpd:refusingtorunwithwritablerootinsidechroot()错误的解决方法

    当我们限定了用户不能跳出其主目录之后,使用该用户登录FTP时往往会遇到这个错误: 500 OOPS: vsftpd: refusing to run with writable root inside ...

  3. 洛谷——P1183 多边形的面积

    P1183 多边形的面积 多边形求面积公式: $\frac {\sum_{i=0}^{n-1}(x_iy_{i+1}-y_ix_{i+1})}{2}$ #include<bits/stdc++. ...

  4. 内存_RAM或ROM_和FLASH存储的真正区别总结

    http://blog.sina.com.cn/s/blog_4b37304d0100fg10.html

  5. 【hdu 2036】改革春风吹满地

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=2036 [题意] 中文题 [题解] 这里用的是叉积对应的求三角形的面积; 即 A×B=A*B*sin ...

  6. 查看TEMP 表空间usage

    SELECT S.sid || ','|| S.serial# sid_serial, S.username, S.osuser, P.spid, S.module, P.program, SUM ( ...

  7. maven 的plugin 的使用

    mvn [plugin-name]:[goal-name] mvn compiler:compile 这里写的十分详细: https://www.tutorialspoint.com/maven/ma ...

  8. HDU2899 Strange fuction 【二分】

    Strange fuction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. Android实战简易教程-第十五枪(实现ListView中Button点击事件监听)

    1.main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...

  10. 垃圾回收GC:.Net自己主动内存管理 上(二)内存算法

    垃圾回收GC:.Net自己主动内存管理 上(二)内存算法 垃圾回收GC:.Net自己主动内存管理 上(一)内存分配 垃圾回收GC:.Net自己主动内存管理 上(二)内存算法 垃圾回收GC:.Net自己 ...