[luoguP1578] 奶牛浴场(DP)
O(s2)算法
详见论文 王知昆--浅谈用极大化思想解决最大子矩形问题












我就复制你能把我怎么样QAQ
#include <cstdio>
#include <iostream>
#include <algorithm>
#define N 5010
#define max(x, y) ((x) > (y) ? (x) : (y))
#define min(x, y) ((x) < (y) ? (x) : (y)) int L, W, n, ans;
struct node
{
int x, y;
}p[N]; inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
} inline bool cmp1(node a, node b)
{
return a.y < b.y;
} inline bool cmp2(node a, node b)
{
return a.x < b.x;
} int main()
{
int i, j, x, u, d;
L = read();
W = read();
n = read();
for(i = 1; i <= n; i++) p[i].x = read(), p[i].y = read();
p[++n].x = 0, p[n].y = 0;
p[++n].x = 0, p[n].y = W;
p[++n].x = L, p[n].y = 0;
p[++n].x = L, p[n].y = W;
std::sort(p + 1, p + n + 1, cmp1);
for(i = 2; i <= n; i++)
{
x = p[i].y - p[i - 1].y;
ans = max(ans, x * L);
}
std::sort(p + 1, p + n + 1, cmp2);
for(i = 1; i <= n; i++)
{
u = W;
d = 0;
for(j = i + 1; j <= n; j++)
{
if(p[j].x == p[i].x) continue;
ans = max(ans, (u - d) * (p[j].x - p[i].x));
if(p[j].y == p[i].y)
{
if(u - p[j].y > p[j].y - d) d = p[j].y;
else u = p[j].y;
}
else
{
if(p[j].y > p[i].y) u = min(u, p[j].y);
else d = max(d, p[j].y);
}
}
}
for(i = n; i >= 1; i--)
{
u = W;
d = 0;
for(j = i - 1; j >= 1; j--)
{
if(p[j].x == p[i].x) continue;
ans = max(ans, (u - d) * (p[j].x - p[i].x));
if(p[j].y == p[i].y)
{
if(u - p[j].y > p[j].y - d) d = p[j].y;
else u = p[j].y;
}
else
{
if(p[j].y > p[i].y) u = min(u, p[j].y);
else d = max(d, p[j].y);
}
}
}
printf("%d\n", ans);
return 0;
}
[luoguP1578] 奶牛浴场(DP)的更多相关文章
- P1578 奶牛浴场
P1578 奶牛浴场 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每头奶牛都必 ...
- 洛谷P1578 奶牛浴场
P1578 奶牛浴场 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每头奶牛都必 ...
- 奶牛抗议 DP 树状数组
奶牛抗议 DP 树状数组 USACO的题太猛了 容易想到\(DP\),设\(f[i]\)表示为在第\(i\)位时方案数,转移方程: \[ f[i]=\sum f[j]\;(j< i,sum[i] ...
- P2340 奶牛会展 DP 背包
P2340 奶牛会展 DP \(n\)头牛,每头牛有智商\(s[i]\)情商\(f[i]\),问如何从中选择几头牛使得智商情商之和最大 且 情商之和.智商之和非负 \(n\le 400,-10^3\l ...
- 【Luogu】P1578奶牛浴场(DP,枚举)
题目链接 枚举极大子矩形.详情请见本题题解:I_AM_HelloWord 代码如下 #include<cstdio> #include<cctype> #include< ...
- 【DP悬线法】奶牛浴场
虽然还是悬线法,但是这道题可不能轻易地套模板了,而是要换一种思路,横着扫一遍,竖着扫一遍,时间复杂度依旧是O(n^2),然而空间复杂度有一定的优化 如果用原来的方法,显然时间空间都会炸(如果你想用ma ...
- BZOJ_1616_[Usaco2008_Mar]_Cow_Travelling_游荡的奶牛_(DP)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1616 给出一张图,有些点不能走,给出起始点和结束点,以及时间,求在该时间到达结束点的方案数. ...
- [Usaco2008 Mar]Cow Travelling游荡的奶牛[简单DP]
Description 奶牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游走,试图找到整块草地中最美味的牧草.Farmer John ...
- USACO奶牛博览会(DP)
Description 奶牛想证明他们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N头奶牛进行了面试,确定了每头奶牛的智商和情商. 贝西有权选择让哪些奶牛参加展览.由于负的智商或情商会造成 ...
随机推荐
- 随机带权选取文件中一行 分类: linux c/c++ 2014-06-02 00:11 344人阅读 评论(0) 收藏
本程序实现从文件中随即选取一行,每行被选中的概率与改行长度成正比. 程序用一次遍历,实现带权随机选取. 算法:假设第i行权重wi(i=1...n).读取到文件第i行时,以概率wi/(w1+w2+... ...
- C#菜鸟正则表达式一
LZ菜鸟,仅整理笔记,顺带记录一下,谓之增加印象. LZ认为,没必要太纠结原理,模型, 屌丝能用就对了,剩下的事情用多了自然会去探索. 中文:正则表达式,英文:Regular ExPression, ...
- turn协议的工作原理
Allocate请求 客户端通过发送Allocate请求给STUN服务器,从而让STUN服务器为A用户开启一个relay端口. a) 客户端A向STUN Port发送Allocate请求(图中 ...
- 个人复习记录之-js
1变量:内存中储存一个数据的储存空间. 使用:声明,赋值,取值.注 不能以数字开头,不能用保留字 *声明提前:在程序正式执行前,都会将所有var声明的变量提前到开始位置,集中创建***赋值留在原地** ...
- QT入门学习2
QT获取窗口几何布局有2类函数: 1.包含框架:x().y().frameGemetry().pos().move()... 2.不包含框架:geometry().width().height().w ...
- git ---查看工作状态和历史提交
1.git查看状态 -git status 2.版权声明 版权声明:新建一个 LICENSE.txt 文件 开源协议:MIT //开源许可里面的最宽松的一个协议,别人可以随便用你的代码,但 ...
- HTML5——动画延迟的另外一种方式
https://www.cnblogs.com/hhhhhh/p/5758167.html
- Vue 路由知识三(过渡动画及路由钩子函数)
路由的过渡动画:让路由有过渡动画,需要在<router-view>标签的外部添加<transition>标签,标签还需要一个name属性. <transition nam ...
- 从Code::Blocks到Dev–C++,Dev-C++安装调试一条龙
关于单文件调试 Codeblocks只支持单文件编译,不支持单文件调试,只有整个工程才能调试,还有路径名里不能有中文和空格,很坑的!就因为这个弃用了. 去你的吧! 老子用别的了 谁支持单文件编译和调试 ...
- 怎样在nexus 中 搜索到远程maven仓库中的jar 文件
怎样在nexus 中 搜索到远程maven仓库中的jar 文件 url: http://www.oschina.net/question/95712_21999 点击Administration菜单下 ...