HDU 2870 Largest Submatrix
这三道题的关系是这样的,1505是1506的加强版,2870又是1505的加强版
如果按照上面由简到易的顺序来做的话,还是很简单的
这道题的思想就是 枚举+DP
因为某些字符可以变值,所以我们枚举a, b, c三个矩阵
分别求出对应的h数组以及最大子矩阵,再在里面求出一个最大值即可。
//#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = ;
char map[maxn][maxn];
int h[][maxn], l[][maxn], r[][maxn]; int main(void)
{
#ifdef LOCAL
freopen("2870in.txt", "r", stdin);
#endif int row, col;
while(scanf("%d%d", &row, &col) == )
{
int i, j, k, t;
for(i = ; i < row; ++i)
scanf("%s", map[i]);
memset(h, , sizeof(h));
int ans = ;
for(i = ; i < row; ++i)
{
for(j = ; j < col; ++j)
{
switch(map[i][j])
{ //处理h数组
case 'a':
++h[][j], h[][j] = h[][j] = ;
break;
case 'b':
++h[][j], h[][j] = h[][j] = ;
break;
case 'c':
++h[][j], h[][j] = h[][j] = ;
break;
case 'w':
++h[][j], ++h[][j], h[][j] = ;
break;
case 'x':
++h[][j], ++h[][j], h[][j] = ;
break;
case 'y':
++h[][j], ++h[][j], h[][j] = ;
break;
case 'z':
++h[][j]; ++h[][j], ++h[][j];
}
}
l[][] = l[][] = l[][] = ;
r[][col-] = r[][col-] = r[][col-] = col-;
for(j = ; j < col; ++j)
for(k = ; k < ; ++k)
{
t = j;
while(t > && h[k][j] <= h[k][t-])
t = l[k][t-];
l[k][j] = t;
} for(j = col-; j >= ; --j)
for(k = ; k < ; ++k)
{
t = j;
while(t < col- && h[k][j] <= h[k][t+])
t = r[k][t+];
r[k][j] = t;
} for(j = ; j < col; ++j)
for(k = ; k < ; ++k)
ans = max(ans, (r[k][j]-l[k][j]+)*h[k][j]);
}
printf("%d\n", ans);
}
return ;
}
代码君
HDU 2870 Largest Submatrix的更多相关文章
- HDU 2870 Largest Submatrix (单调栈)
http://acm.hdu.edu.cn/showproblem.php? pid=2870 Largest Submatrix Time Limit: 2000/1000 MS (Java/Oth ...
- hdu 2870 Largest Submatrix(平面直方图的最大面积 变形)
Problem Description Now here is a matrix with letter 'a','b','c','w','x','y','z' and you can change ...
- Largest Submatrix(动态规划)
Largest Submatrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- POJ 3494 Largest Submatrix of All 1’s
POJ 2796 Feel Good HDU 1506 Largest Rectangle in a Histogram 和这两题一样的方法. #include<cstdio> #incl ...
- POJ-3494 Largest Submatrix of All 1’s (单调栈)
Largest Submatrix of All 1’s Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 8551 Ac ...
- Largest Submatrix of All 1’s
Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we m ...
- codeforces 407D Largest Submatrix 3
codeforces 407D Largest Submatrix 3 题意 找出最大子矩阵,须满足矩阵内的元素互不相等. 题解 官方做法 http://codeforces.com/blog/ent ...
- Largest Submatrix of All 1’s(思维+单调栈)
Given a m-by-n (0,1)-matrix, of all its submatrices of all 1's which is the largest? By largest we m ...
- POJ 3494 Largest Submatrix of All 1’s 单调队列||单调栈
POJ 3494 Largest Submatrix of All 1’s Description Given a m-by-n (0,1)-matrix, of all its submatrice ...
随机推荐
- Asp.net的服务器推技术 (Server Push)
在以往的和服务器端通信技术中,我们多数使用的是AJAX轮询式访问,也就是在Javascript中控制时间间隔,然后每隔一段时间就访问一次服务器,然后获得数据或通知.但是这种轮询方式的访问有90%是在做 ...
- mvc5 知识点01
1.ViewBag 动态数据类型,也就是说可以随便指定属性,前后台传值很是有用 2.Layout 属性,定义模版,模版中一般用@RenderBody() 做占位符,用于放置子页面内容 3.@model ...
- Visual Studio 常用快捷键 (二)
想不到上一篇 [Visual Studio 常用快捷键] 受这么多人的欢迎.看来大家对Visual Studio的用法非常感兴趣. 接下来我准备写一个 “Visual Studio使用技巧 ” 一个系 ...
- BZOJ 1296: [SCOI2009]粉刷匠 分组DP
1296: [SCOI2009]粉刷匠 Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上 ...
- ARP欺骗与中间人攻击
前言: 上一篇WPA/WAP2wifi 密码破解笔记说到如何探测附近开放的AP并且破解进入,那么进入别人据局域网我们能干些什么呢?换句话说如果别人进入了我们内部网络,会有什么影响?本文简要介绍了ARP ...
- 好玩的算法(JS版)
1.字符串反转 'cba'.split('').reverse().join(''); 2.在数组最后一位添加一项 array[array.length]=(new value);
- 【ArcEngine入门与提高】Element(元素)、Annotation(注记)旋转
因项目需要,需要做一个旋转注记的工具.因为注记这玩意用的比较少,网上资源也很少,所以做起来相当头疼.在经过一番研究之后,终于搞清楚注记的存储原理了,原来是和Element的类似,只不过注记是要把Ele ...
- 指定IE浏览器渲染方式
<meta http-equiv="X-UA-Compatible" content="IE=7" />以上代码告诉IE浏览器,无论是否用DTD声明 ...
- 防止SQL注入和XSS攻击Filter
nbsp;今天系统使用IBM的安全漏洞扫描工具扫描出一堆漏洞,下面的filter主要是解决防止SQL注入和XSS攻击 一个是Filter负责将请求的request包装一下. 一个是request包装器 ...
- JAVA多线程下载网络文件
JAVA多线程下载网络文件,开启多个线程,同时下载网络文件. 源码如下:(点击下载 MultiThreadDownload.java) import java.io.InputStream; im ...