DP【洛谷P3135】[USACO16JAN]堡哞Fort Moo
【洛谷P3135】[USACO16JAN]堡哞Fort Moo
Bessie和她的朋友Elsie正在建筑一个堡垒,与任何一个好的堡垒一样,这个需要一个强固的框架。Bessie想造一个轮廓是1m宽的空心矩形框架,这样堡垒就可以造在框架上了。
Bessie以及选了一个地点建筑堡垒,一片N*M(1<=N,M<=200)的平地。不幸的是,这个地方有一些沼泽地而不可以支撑框架。请帮助Bessie决定最大她可以用堡垒覆盖的区域(即支撑框架的区域),而且避免框架在任何一块沼泽地上。
朴素暴力用前缀和优化成\(n^4\)。
枚举两行,扫一遍m找出最左一列和最右一列,优化为\(n^3\)。
code:
#include <iostream>
#include <cstdio>
using namespace std;
const int wx=217;
inline int read(){
	int sum=0,f=1; char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
	while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0'; ch=getchar();}
	return sum*f;
}
int ans,n,m;
int a[wx][wx],b[wx][wx],c[wx][wx],d[wx][wx];
char cc[wx];
void slove(int first,int second){
	int flag=0,fltot=0;
	for(int i=1;i<=m;i++){
		if(!b[first][i]||!b[second][i])continue;
		if(!b[first][i-1]||!b[second][i-1])flag=i;
		if(a[second][flag]-a[first][flag]+1!=second-first+1)flag++;
		if(a[second][i]-a[first][i]+1==second-first+1){
			ans=max(ans,(second-first+1)*(i-flag+1));
		}
	}
}
int main(){
	n=read(); m=read();
	for(int i=1;i<=n;i++){
		scanf("%s",cc+1);
		for(int j=1;j<=m;j++){
			if(cc[j]=='X')continue;
			a[i][j]=a[i-1][j]+1;
			b[i][j]=b[i][j-1]+1;
		}
	}
	for(int i=n;i>=1;i--){
		for(int j=m;j>=1;j--){
			if(!a[i][j])continue;
			c[i][j]=c[i+1][j]+1;
			d[i][j]=d[i][j+1]+1;
		}
	}
	/*
	$n^4暴力$
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(!a[i][j])continue;
			for(int k=i;k<=n;k++){
				for(int l=j;l<=m;l++){
					if(!a[k][l])continue;
					if(k-i+1<=a[k][l]&&l-j+1<=b[k][l]&&k-i+1<=c[i][j]&&l-j+1<=d[i][j]){
						ans=max(ans,(k-i+1)*(l-j+1));
					}
				}
			}
		}
	}
	*/
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			slove(i,j);
		}
	}
	printf("%d\n",ans);
	return 0;
}
DP【洛谷P3135】[USACO16JAN]堡哞Fort Moo的更多相关文章
- 2018.08.17 洛谷P3135 [USACO16JAN]堡哞(前缀和处理)
		传送门 有趣的前缀和. 数据范围中的n≤200" role="presentation" style="position: relative;"> ... 
- 树形DP 洛谷P2014 选课
		洛谷P2014 选课 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门 ... 
- 区间DP 洛谷P2858牛奶零食
		题目链接 题意:你有n个货物从1-n依次排列,每天可以从两侧选一个出来卖,卖的价格是当天的天数乘该货物的初始价格,问这批货物卖完的最大价格 输入:第一行n,之后是n个货物的初始价值 这道题不能用贪心做 ... 
- P1279 字串距离  dp 洛谷
		题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X ... 
- dp 洛谷P1977 出租车拼车  线性dp
		题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱 ... 
- 经典DP 洛谷p1880 石子合并
		https://www.luogu.org/problemnew/show/P1880 题目 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新 ... 
- [DP]洛谷P1115最大子段和
		题目来源 https://www.luogu.org/problemnew/show/P1115 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一行是一 ... 
- 洛谷 P3133 [USACO16JAN]无线电联系Radio Contact
		P3133 [USACO16JAN]无线电联系Radio Contact 题目描述 Farmer John has lost his favorite cow bell, and Bessie the ... 
- 尼克的任务 dp 洛谷1280
		蒟蒻表示老久没看过dp题目了,,挺水的一道dp题目都没想出来,,, 首先设dp[i]表示从开始到i时间的最大空闲时间,用vector to[x] 表示从x点开始的任务结束时间,cnt[x]表示从x开始 ... 
随机推荐
- showModalDialog()子窗口刷新父窗口
			今天再次使用showModalDialog(),发现了两个问题,一是子窗口如何刷新父窗口,二是窗口的参数问题. 1 子窗口刷新父窗口 如果是window.open();问题就好办,直接用window. ... 
- 2015.1.31 DataGridView自动滚动到某行
			方法一.dv.CurrentCell = dv.Rows[i].Cells[2] 但此cell不能是隐藏cell 方法二. if (dgr.Index < dv_sel_aw.FirstDisp ... 
- CSS3图片以中心缩放,放大超出隐藏实现
			首页,重点是有一个包裹img标签的容器,这里我们给该容器设置一个class为selfScale <div class="selfScale"> <img sr=& ... 
- Stun方式的P2P实现原理(转)
			转帖地址:http://www.cppblog.com/peakflys/archive/2013/01/25/197562.html 二.STUN方式的P2P实现 STUN是RFC3489规定的 ... 
- TypeError: 'append' called on an object that does not implement interface FormData 解决方法
			使用ajax提交form表单时,$("formId").serialize()不能提交type="file"类型的input,这个时候可以选择使用FormDat ... 
- 虚拟机VMware的安装以及指南
			VMware是一个非常强大的虚拟软件,它的更新速度非常的快,随着软件的更新速度的加快,它的大小会越来越大,但是新的版本大多数会是给企业使用的,对于我们而言,不那么的需要,所以,我们只需要使用一些差不多 ... 
- 解决html中的乱码问题
			1.最简单粗暴的方法就是加一个meta标签,不过值得我们注意的是我们的meta标签是与我们的head标签是同一级的,所以千万不能将meta标签加到我们的head标签中. <meta http-e ... 
- 定位程序问题出现的原因工具-jstack
			jstack还可以生成线程快照 如何使用jstack: 1.打开命令行,输入jstack 在任务管理器中就可看到对应进程id 2.在命令行中输入 jstack -l 进程id 这样就可得到进程中所有的 ... 
- 【总结整理】天地图WMTS服务与卫星图匹配与坐标转换
			http://blog.sina.com.cn/s/blog_60abbd570102wnhh.html 
- strstr()查找函数,strchr(),strrchr(),stristr()/strpos(),strrpos()查找字符串位置
			在一个较长的字符串这查找匹配的字符串或字符,其中strstr()和strchr()是完全一样的. 例: echo strstr('why always you','you'); 输出: you 如果为 ... 
