acdream 小晴天老师系列——晴天的后花园 (暴力+剪枝)
小晴天老师系列——晴天的后花园
Problem Description
小晴天非常漂亮的后花园,打算以后退休之后在里面种种花,养养草,所以现在小晴天打算为他的后花园围上栅栏。
小晴天的后花园可以看成是一个m*n的矩形,但是其中有一些地方种了树,这些地方都不能安装栅栏,现在小晴天把后花园的平面图告诉你了,请你帮忙设计一个最大的矩形栅栏。
Input
单组数据,第一行包括两个整数m,n(1<=m,n<=500),接下来m行,每行包括n个字符,仅由'x'和'.'组成(ASCII码分别是120与46).
其中‘x’表示这个方格有树木,‘.’表示这个点可以建造栅栏
Output
若可以围成一个闭合栅栏,输出一个整数,表示栅栏能打到的最大周长
否则输出impossible
Sample Input
4 5
.....
.x.x.
.....
.....
2 2
.x
x.
2 5
.....
xxxx.
Sample Output
14
impossible
impossible
Hint
样例一可以绕着整个图一圈,周长为2*(4+3)=14
样例二与三因为有树木的存在,不能建造一个闭合的栅栏。
本题为单文件读写,样例包括三个文件
思路:暴力的话就是选两个点,穷举任意的矩形。但是这样可能会超时,加些必要的剪枝可以过。
穷举第一个点(x1,y1),第二个点(x2,y2)。第一个点任意摆放,第2个点必须从x1+1,y1+1开始穷举,这样可以减少一些不必要的计算。首先要得到从第一个点开始,y1列可以到达哪列,即中间不能有任何树木,同理,行也是这样。然后第二个点的y2先穷举,遇到一个树就break,这样又减少了计算。这样子就保证了3个边都是无障碍的,另外一个边就得靠计算了,可以先预处理。
/*
* this code is made by xcw0754
* Problem: 1705
* Verdict: Accepted
* Submission Date: 2015-07-15 23:53:13
* Time: 28MS
* Memory: 4664KB
*/
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N=;
int m, n;
int g[N][N];
int row[N][N];
int col[N][N];
LL ans; void secon(int r,int c)
{
int up_m=r;
int up_n=c;
while( up_m<=m && !g[up_m][c]) up_m++;
while( up_n<=n && !g[r][up_n]) up_n++; for(int i=r+; i<up_m; i++)
{
for(int j=c+; j<up_n; j++)
{
if(g[i][j]) break; if( !(col[j][i]-col[j][r]) )
ans=max(ans, (LL)*(i-r)+*(j-c) );
}
} } int cal() //穷举:从小开始,遇到点就结束
{ for(int i=; i<m; i++)
{
for(int j=; j<n; j++)
{
if(g[i][j]) continue;
secon(i,j);
}
}
return ans;
} int main()
{
//freopen("e://input.txt","r",stdin);
char c;
scanf("%d%d",&m,&n);
for(int i=; i<=m; i++)
{
getchar();
for(int j=; j<=n; j++)
{
if(getchar()=='x') g[i][j]=;
row[i][j]=row[i][j-]+g[i][j]; //行先计算了
}
} for(int i=; i<=n; i++) //计算列的
for(int j=; j<=m; j++)
col[i][j]=col[i][j-]+g[j][i]; for(int i=; i<n+; i++) g[m+][i]=;
for(int i=; i<m+; i++) g[i][n+]=; if(!cal()) puts("impossible");
else printf("%lld\n",ans);
}
AC代码
acdream 小晴天老师系列——晴天的后花园 (暴力+剪枝)的更多相关文章
- D - 小晴天老师系列——晴天的后花园
D - 小晴天老师系列——晴天的后花园 Time Limit: 10000/5000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Oth ...
- acdream 小晴天老师系列——苹果大丰收(DP)
小晴天老师系列——苹果大丰收 Problem Description 小晴天的后花园有好多好多的苹果树,某天,苹果大丰收~小晴天总共摘了M个苹果,我们假设苹果之间是不可分辨的. 为了保存苹果,小晴天买 ...
- acdream 小晴天老师系列——竖式乘法(简单穷举)
小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) ...
- acdream 小晴天老师系列——我有一个数列! (ST算法)
小晴天老师系列——我有一个数列! Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)S ...
- F - 小晴天老师系列——苹果大丰收
F - 小晴天老师系列——苹果大丰收 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Other ...
- C -小晴天老师系列——竖式乘法
C - 小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others ...
- G - 小晴天老师系列——可恶的墨水瓶
G - 小晴天老师系列——可恶的墨水瓶 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Othe ...
- E - 小晴天老师系列——我有一个数列!
E - 小晴天老师系列——我有一个数列! Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/O ...
- [ACdream]小晴天老师系列——竖式乘
题目链接:http://acdream.info/contest?cid=1269#problem-C Problem Description 小晴天是ACdream团队中最牛的老师之一,他最擅长数学 ...
随机推荐
- W25Q32的使用
一.W25Q32简介 W25Q32是华邦公司推出的大容量“SPI FLASH” 产品. 1.容量 32M-Bit/4M-byte(4,194,304) 2.存储结构 页:256-bytes 扇区:4 ...
- Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC
[转载] :http://my.oschina.net/rouchongzi/blog/171046 Java之类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指 ...
- POJ - 1741 Tree
DescriptionGive a tree with n vertices,each edge has a length(positive integer less than 1001).Defin ...
- CQRS学习——Storage实现(EF+Code First+DynamicReponsitory)[其四]
[这里是的实现,指的是针对各个数据访问框架的一个基础实现] 目标 定义仓储/QueryEntry的基本功能 实现仓储的基本功能,以利于复用 实现一些常用的功能 提供一些便利的功能 目标框架 博主使用的 ...
- 字符串转到js对象
var obj = (new Function("return " + str))();
- python参考手册--第8章
1.模块和import (1)首次import module会做以下3件事: a)创建新的命名空间,用作在该源文件中定义的所有对象的容器.在模块中定义的函数和方法在使用global语句时将访问该命名空 ...
- HDU4647+贪心
/* 贪心. 题意:给定一些点 一些边 点和边都有价值.现在A B 选点.求A-B的maxVal 思路:分割边.边的1/2分给两个端点. 如果这两个点被同一个人取,则ok:否则 做减法也行,对题意无影 ...
- Tomcat Java内存溢出 PermGen space 解决方案
-Xms300m -Xmx400m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256M
- OSharp框架总体设计
OSharp框架解说系列(1):总体设计 〇.前言 哈,距离前一个系列<MVC实用构架设计>的烂尾篇(2013年9月1日)已经跨了两个年头了,今天是2015年1月9日,日期已经相映,让我们 ...
- 利用Spring AOP自定义注解解决日志和签名校验
转载:http://www.cnblogs.com/shipengzhi/articles/2716004.html 一.需解决的问题 部分API有签名参数(signature),Passport首先 ...