洛谷 [P2701] 巨大的牛棚
首先,本题是一道最大子矩阵问题,且m,n较小,可以使用DP做,
与 洛谷 [P1387]最大正方形 做法相同。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
const int MAXN=5005;
int init(){
int rv=0,fh=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') fh=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
rv=(rv<<1)+(rv<<3)+c-'0';
c=getchar();
}
return fh*rv;
}
bool ff[MAXN][MAXN];
int dp[MAXN][MAXN],n,t,ans;
int main(){
freopen("in.txt","r",stdin);
n=init();t=init();
for(int i=1;i<=t;i++){
int x=init(),y=init();
ff[y][x]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(ff[i][j]) dp[i][j]=0;
else{
dp[i][j]=min(dp[i-1][j],min(dp[i-1][j-1],dp[i][j-1]))+1;
ans=max(dp[i][j],ans);
}
}
}
cout<<ans;
fclose(stdin);
return 0;
}
本题也可以使用悬线法求最大子矩阵,首先 O(n^2) 预处理,对于矩阵上的每一个点,我们可以:
1.从它向上引一条悬线,遇到边界或障碍点停止,h[i][j] 数组记录从点 (i,j) 向上的悬线长度。
2.向左延伸,遇到边界或障碍点停止,l[i][j] 数组记录从点 (i,j) 向左最大能延伸的长度。
3.向右延伸,遇到边界或障碍点停止,r[i][j] 数组记录从点 (i,j) 向右最大能延伸的长度。
但是这样是不够的, 因为,L[i][j] 和 L[i][j] 的值都各自取决于 L[i-1][j] 和 R[i-1][j]。(因为为保证成为一个矩形,L[i][j] 不能超过 L[i-1][j],R同理)
所以枚举点对 l 和 r 进行更新,对 L[i-1][j] 与 l[i][j] 取 min,r 同理。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
const int MAXN=1005;
int init(){
int rv=0,fh=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') fh=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
rv=(rv<<1)+(rv<<3)+c-'0';
c=getchar();
}
return fh*rv;
}
int n,t,l[MAXN][MAXN],r[MAXN][MAXN],L[MAXN][MAXN],R[MAXN][MAXN],H[MAXN][MAXN],ans;
bool ff[MAXN][MAXN];
int main(){
freopen("in.txt","r",stdin);
n=init();t=init();
for(int i=1;i<=t;i++){
int x=init(),y=init();
ff[x][y]=1;
}
for(int i=1;i<=n;i++){
l[i][1]=0;
for(int j=2;j<=n;j++){
if(ff[i][j]){
l[i][j]=j;
}else l[i][j]=l[i][j-1];
}
r[i][n]=n+1;
for(int j=n-1;j>=1;j--){
if(ff[i][j]){
r[i][j]=j;
}else r[i][j]=r[i][j+1];
}
}
for(int j=1;j<=n;j++){
H[1][j]=1;L[1][j]=l[1][j];R[1][j]=r[1][j];
}
for(int i=2;i<=n;i++){
for(int j=1;j<=n;j++){
if(ff[i-1][j]){
H[i][j]=1;
L[i][j]=l[i][j],R[i][j]=r[i][j];
}else{
H[i][j]=H[i-1][j]+1;
L[i][j]=max(L[i-1][j],l[i][j]);
R[i][j]=min(R[i-1][j],r[i][j]);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int len=min(H[i][j],R[i][j]-L[i][j]-1);
//if(len==6) printf("%d %d\n",i,j);
ans=max(ans,len);
}
}
cout<<ans;
fclose(stdin);
return 0;
}
洛谷 [P2701] 巨大的牛棚的更多相关文章
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷——P2701 [USACO5.3]巨大的牛棚Big Barn
P2701 [USACO5.3]巨大的牛棚Big Barn 题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn 题解
P2701 [USACO5.3]巨大的牛棚Big Barn 题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷—— P2701 [USACO5.3]巨大的牛棚Big Barn
https://www.luogu.org/problem/show?pid=2701 题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的 ...
- 洛谷P2874 [USACO07FEB]新牛棚Building A New Barn [贪心]
题目传送门 题目描述 After scrimping and saving for years, Farmer John has decided to build a new barn. He wan ...
- 洛谷P2402 奶牛隐藏(网络流,二分答案,Floyd)
洛谷题目传送门 了解网络流和dinic算法请点这里(感谢SYCstudio) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...
- USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)
usaco ch1.4 sort(d , d + c, [](int a, int b) -> bool { return a > b; }); 生成与过滤 generator&& ...
- 洛谷P2845-Switching on the Lights 开关灯
Problem 洛谷P2845-Switching on the Lights 开关灯 Accept: 154 Submit: 499Time Limit: 1000 mSec Memor ...
随机推荐
- sass 安装与使用
1.安装. 安装ruby :http://rubyinstaller.org/downloads 创建项目:在f盘创建一个名为sass的文件夹 ruby命令行:f: ruby命令行:cd sass r ...
- [OpenCV学习笔记3][图像的加载+修改+显示+保存]
正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...
- Maven中央仓库源地址改为阿里云(IDEA)
我的Maven是IDEA2017.1.2集成的,所以settings.xml在此位置 E:\Program Files\JetBrains\IntelliJ IDEA 2017.1.2\plugins ...
- vue-router自动判断左右翻页转场动画
前段时间做了一个移动端spa项目,技术基于 :vue + vue-router + vuex + mint-ui 因为使用了vue-cli脚手架的webpack模版,所有页面都以.vue为后缀的文件作 ...
- 基于 HTML5 WebGL 的 3D 仪表数据监控
工控仪表重点发展基于现场总线技术的主控系统装置及智能化仪表.特种和专用自动化仪表:全面扩大服务领域,推进仪器仪表系统的数字化.智能化.网络化,完成 自动化仪表从模拟技术向数字技术的转变:推进具有自主版 ...
- 分享整理的免费API接口
天气接口 聚合数据: http://op.juhe.cn/onebox/weather/query 用例 官方文档 来源:weather.com 百度接口: http://api.map.baidu. ...
- UML图学习之二 类图
类图(ClassDiagrams)是根据系统中的类以及各类之间的关系描述系统的静态视图.类图不仅显示系统内信息的结构,还描述系统内这些信息的行为.类图的一个重要目的是为其他图(如顺序图.交互图)定义一 ...
- 信号处理引发的cpu高
背景知识: 1.tty 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备. tty指的是七个alt+crtl+F1~F7.tty1-tty6表示文字界面,可以用Ctrl+Al ...
- ThinkPhp关闭Debug后出错解决方案
注:我使用的是ThinkPHP的3.2版本,其他版本类似 从自己入手PHP开发以来,一直使用的是ThinkPHP的框架,前几天偶然间碰到了一个错误,在Debug模式下网站一切正常,而关闭Debug进行 ...
- python3 第八章 - 完善九九乘法表
前面我们在第四章的时候挖了个坑:怎么用优雅的方式来打印九九乘法表.这一章我们就来填上这个坑. 首先,我们再来看下九九乘法表是什么样子的 1 x 1 = 1 1 x 2 = 2 2 x 2 = 4 1 ...