博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷4147:玉蟾宫——题解
阅读量:6177 次
发布时间:2019-06-21

本文共 1270 字,大约阅读时间需要 4 分钟。

土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda。

现在freda要找一块矩形土地,要求这片土地都标着'F'并且面积最大。

输出最大面积*3。

请食用王知昆论文:,和洛谷第一篇题解。

代码参自洛谷第一篇题解,然而那篇题解多了两个无用数组。

这里使用的是算法2(也叫悬线法)

#include
#include
#include
#include
#include
#include
using namespace std;const int N=1010;inline char getc(){ char ch=getchar(); while(ch!='R'&&ch!='F')ch=getchar(); return ch;}int n,m,ans,mp[N][N],h[N][N],l[N][N],r[N][N];int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ char ch=getc(); mp[i][j]=(ch=='F'); } } for(int i=1;i<=n;i++){ int t=0; for(int j=1;j<=m;j++){ if(mp[i][j])l[i][j]=t; else l[i][j]=0,t=j; } t=m+1; for(int j=m;j>=1;j--){ if(mp[i][j])r[i][j]=t; else r[i][j]=m+1,t=j; } } for(int i=1;i<=m+1;i++)r[0][i]=m+1; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(mp[i][j]){ h[i][j]=h[i-1][j]+1; l[i][j]=max(l[i][j]+1,l[i-1][j]); r[i][j]=min(r[i][j]-1,r[i-1][j]); ans=max(ans,(r[i][j]-l[i][j]+1)*h[i][j]); } } } printf("%d\n",3*ans); return 0;}

+++++++++++++++++++++++++++++++++++++++++++

 +本文作者:luyouqi233。               +

 +欢迎访问我的博客:+

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/8523073.html

你可能感兴趣的文章
connector for python
查看>>
等价类划分的应用
查看>>
Web Service(下)
查看>>
trigger()
查看>>
nvm 怎么安装 ?
查看>>
Java VM里的magic
查看>>
[Node.js]Domain模块
查看>>
Linux操作系统文档
查看>>
利用Tensorflow训练自定义数据
查看>>
c++官方文档-枚举-联合体-结构体-typedef-using
查看>>
[题解]UVA11029 Leading and Trailing
查看>>
利用vue-gird-layout 制作可定制桌面 (一)
查看>>
校园社交网站app
查看>>
如何指定某些文件关闭ARC
查看>>
4、跃进表
查看>>
JAVA面向对象的总结(静态函数与static关键字)
查看>>
课堂作业第四周课上作业一
查看>>
使用Java语言开发微信公众平台(七)——音乐消息的回复
查看>>
陶哲轩实分析习题9.1.6
查看>>
常用音频软件:Cool edit pro
查看>>