博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P4147 玉蟾宫
阅读量:5010 次
发布时间:2019-06-12

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

P4147 玉蟾宫

给定一个 \(N * M\) 的矩阵

求最大的全为 \(F\) 的子矩阵

Solution

悬线法

限制条件为转移来的和现在的都为 \(F\)

Code

#include
#include
#include
#include
#include
#include
#define LL long long#define REP(i, x, y) for(int i = (x);i <= (y);i++)using namespace std;int RD(){ int out = 0,flag = 1;char c = getchar(); while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();} while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();} return flag * out; }const int maxn = 2019;int lenx, leny;int map[maxn][maxn];int l[maxn][maxn], r[maxn][maxn];int up[maxn][maxn];int ans;void init(){ lenx = RD(), leny = RD(); REP(i, 1, lenx)REP(j, 1, leny){ char s[19]; scanf("%s", s); if(s[0] == 'F'){ map[i][j] = 1; l[i][j] = r[i][j] = j; up[i][j] = 1; } } REP(i, 1, lenx)REP(j, 2, leny){ if(map[i][j] && map[i][j - 1])l[i][j] = l[i][j - 1]; } REP(i, 1, lenx)for(int j = leny - 1;j >= 1;j--){ if(map[i][j] && map[i][j + 1])r[i][j] = r[i][j + 1]; } }void solve(){ REP(i, 1, lenx)REP(j, 1, leny){ if(!map[i][j])continue; if(i > 1 && map[i - 1][j]){ l[i][j] = max(l[i][j], l[i - 1][j]); r[i][j] = min(r[i][j], r[i - 1][j]); up[i][j] = up[i - 1][j] + 1; } int a = r[i][j] - l[i][j] + 1; ans = max(ans, a * up[i][j]); } printf("%d\n", ans * 3); }int main(){ init(); solve(); return 0; }

转载于:https://www.cnblogs.com/Tony-Double-Sky/p/9910249.html

你可能感兴趣的文章
Python 多线程学习
查看>>
appcan官方ajax
查看>>
获取NVIDIA显卡的温度
查看>>
Dijkstra算法
查看>>
Deep Learning 9: Performance
查看>>
面试题61 把二叉树打印成多行
查看>>
C#例子 易懂故事 接口 委托 事件 异步通知 好玩.
查看>>
[转]Windows Shell 编程 第十一章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987992】...
查看>>
修改presto新版源码让他支持redash数据库
查看>>
Javascript的书写位置
查看>>
树-线索二叉树
查看>>
JAVA遇见HTML——Servlet篇:Servlet基础
查看>>
第二章 Vue快速入门--20 品牌案例-完成品牌列表的添加功能+ 21 品牌案例-根据Id完成品牌的删除...
查看>>
Java单例模式
查看>>
重温WCF之消息契约(MessageContract)(六)
查看>>
Excel2007制作直方图和正态分布曲线图
查看>>
android adb常用指令
查看>>
Android框架之路——GreenDao3.2.2的使用
查看>>
类方法WCF学习笔记-KnowTypeAttribute用法
查看>>
平台程序微信平台开发应用的签名
查看>>