BZOJ 3039 玉蟾宫
Description
有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。
这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda。
现在freda要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着'F'并且面积最大。
但是rainbow和freda的OI水平都弱爆了,找不出这块土地,而蓝兔也想看freda卖萌(她显然是不会编程的……),所以它们决定,如果你找到的土地面积为S,它们每人给你S两银子。
Input
第一行两个整数N,M,表示矩形土地有N行M列。
接下来N行,每行M个用空格隔开的字符'F'或'R',描述了矩形土地。
Output
输出一个整数,表示你能得到多少银子,即(3*最大'F'矩形土地面积)的值。
Sample Input
R F F F F F
F F F F F F
R R R F F F
F F F F F F
F F F F F F
Sample Output
HINT
对于50%的数据,1<=N,M<=200
对于100%的数据,1<=N,M<=1000
题意:给你一个0 1的矩阵,求最大的全是1的矩阵。
题解:枚举矩形下方的两个点(这个过程只需要枚举3个坐标),然后再找最大能够向上延伸多高。容易预处理出每个位置向上最多延伸多高,那么要求的就是这两个点直接所有点(包括这两个点)的延伸高度的最小值。
#include <bits/stdc++.h>const int maxn=1005; int n, m, a[maxn][maxn];int main() {char s[10];scanf("%d%d", &n, &m);for(int i=1; i<=n; i++)for(int j=1; j<=m; j++){scanf("%s", s);a[i][j]= s[0]=='F'? 1+a[i][j-1]:a[i][j-1];}int ans=0;for(int l=1; l<=m; l++)for(int r=l; r<=m; r++){int tans=0;for(int i=1; i<=n; i++){if(a[i][r]-a[i][l-1]==r-l+1) tans+=a[i][r]-a[i][l-1];else tans=0;ans=std::max(ans, tans);}}printf("%d\n", ans*3);return 0; }
View Code
/**************************************************************Problem: 3039User: strangersLanguage: C++Result: AcceptedTime:780 msMemory:5244 kb ****************************************************************/#include <bits/stdc++.h>const int maxn=1005; int n, m, a[maxn][maxn]; int ls[maxn], rs[maxn], stk[maxn], top;void debug() {for(int i=1; i<=m; i++)printf("ls[%d]=%d, rs[%d]=%d ", i, ls[i], i, rs[i]);printf("\n"); }int main() {char s[10];scanf("%d%d", &n, &m);for(int i=1; i<=n; i++)for(int j=1; j<=m; j++){scanf("%s", s);a[i][j]= s[0]=='F'? 1+a[i-1][j]:0;}int ans=0;for(int i=1; i<=n; i++){top=0, stk[top]=0;for(int j=1; j<=m; j++){while(top && a[i][stk[top]]>=a[i][j]) top--;ls[j]=stk[top], stk[++top]=j;}top=0, stk[top]=m+1;for(int j=m; j; j--){while(top && a[i][stk[top]]>=a[i][j]) top--;rs[j]=stk[top], stk[++top]=j;}//debug();for(int j=1; j<=m; j++)ans=std::max(ans, a[i][j]*(rs[j]-ls[j]-1));}printf("%d\n", ans*3);return 0; }
View Code
转载于:https://www.cnblogs.com/Yokel062/p/11508608.html
BZOJ 3039 玉蟾宫相关推荐
- BZOJ 3039: 玉蟾宫
3039: 玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 这片土地被分成N*M个格子,每个 ...
- BZOJ 3039: 玉蟾宫( 悬线法 )
最大子矩阵...悬线法..时间复杂度O(nm) 悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ...
- bzoj 3039: 玉蟾宫(悬线法)
3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 975 Solved: 562 [Submit][Status][Discuss] ...
- BZOJ[3039]玉蟾宫 悬线法
题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=3039 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山 ...
- bzoj 3039 玉蟾宫 单调栈
预处理出每个点向上扩展的高度,对于每一行维护单调递增的栈,在弹出元素的时候统计答案. #include<iostream> #include<cstdio> #include& ...
- BZOJ 3039 玉蟾宫 最大子矩阵 算♂法②
题意:链接 方法:最大子矩阵之算♂法② 解析: 首先这道题单调栈DP是肯定能过的,但是一点都不高端! 什么年代了还用这种方式! 所以如何彰显自己是个高端的人呢? 悬线法能满足你的需求! 什么是悬线法? ...
- 【BZOJ】3039: 玉蟾宫(DP/单调栈)
http://www.lydsy.com/JudgeOnline/problem.php?id=3039 每次看到我的提交都有点淡淡的忧伤T_T.. 看到此题我想到用前缀和维护点ij向左和向上能拓展的 ...
- 【BZOJ-30391057】玉蟾宫棋盘制作 悬线法
3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 753 Solved: 444 [Submit][Status][Discuss] ...
- bzoj3039 玉蟾宫
3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 606 Solved: 367 [Submit][Status][Discuss] ...
最新文章
- 苹果2010新品发布会图文实录
- 用PIL读取保存图片错误 :OSError: cannot write mode RGBA as JPEG
- c语言将数组变为空,求助~~ 如何把数组变成动态输入的?
- 再高深的 Python 面试难题,这门课都给你整得明明白白!
- Android获取当前位置的三种方式及其使用方法
- java 视频 缩略图_如何使用java提取视频缩略图或某一帧的图片
- Log4j(1)--hellloworld
- python检测输入文本的语言
- php 生成word的三种方式
- java 多线程(生产者消费者)
- Android通过RecyclerView实现手风琴效果
- LINUX安装KDC服务
- 双11临近,电脑无缘无故的弹出了双11天猫广告,必须追踪到底
- matlab 画柱状图和误差棒,小白1分钟绘图:带误差棒的柱状图
- Python爬虫实战(1):抓取毒舌电影最新推送
- 打包微服务前后端分离项目并部署到服务器 --- 分布式 Spring Cloud + 页面渲染 Nuxt.js
- c++软件开发面试旋极面试题_北京旋极信息技术股份有限公司2015招聘
- RealView® 编译工具 汇编器指南
- 如何优雅的写 Controller 层代码?找对姿势!
- 【连载】《linux入门很简单》电子版——作者:刘金鹏(序:一切的起因2)