题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1505

分析:
这题是HDU 1506 的加强版,定义一个二维数组,d[i][j]表示第i行j列元素在前i行中的最大高度。(以第一行为底)例如测试样例:
0 1 1 1 1 1                                                 0 1 1 1 1 1
1 1 1 1 1 1           (F=1,R=0,方便求和)        1 2 2 2 2 2
0 0 0 1 1 1           转化完就是右边矩阵            0 0 0 3 3 3
1 1 1 1 1 1                                                 1 1 1 4 4 4
1 1 1 1 1 1                                                 2 2 2 5 5 5
当然也有比较简单的以第一列为底,这样就可以在读取数据的循环中把a[i][j]赋值。
接下来就和 HDU 1506 一样了,逐行求最大矩形面积。
动态方程:l[j] r[j]分别表示左边界与右边界。(见上一篇:HDU 1506 Largest Rectangle in a Histogram)
l[j]=l[l[j]-1];
r[j]=r[r[j]-1];
 
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define inf 1<<30
using namespace std;
char s[][];
int a[][],l[],r[];
int main()
{
int T,t,n,m;
cin>>T;
while(T--)
{
cin>>n>>m;
memset(a,,sizeof(a));
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
{
cin>>s[i][j];
}
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
{ if(s[i][j]=='F')a[i][j]=a[i-][j]+;
else a[i][j]=;
}
int ans=-;
for(int i=;i<=n;i++)
{
l[]=;r[m]=m;
for(int j=;j<=m;j++)
{
t=j;
while(t>&&a[i][j]<=a[i][t-])t=l[t-];
l[j]=t;
}
for(int j=m-;j>=;j--)
{
t=j;
while(t<m&&a[i][j]<=a[i][t+])t=r[t+];
r[j]=t;
}
for(int j=;j<=m;j++)
ans=max(ans,(r[j]-l[j]+)*a[i][j]);
}
printf("%d\n",ans*);
}
}

hdu1505(dp求最大子矩阵)的更多相关文章

  1. hdu 2870(dp求最大子矩阵)

    题意:让你求的是由同一字母组成的最大子矩阵,w可以变成a或者b,x可以变成b或者c,y可以变成a或者c,z可以变成a或者b或者c. 分析:这是hdu 1506.hdu 1505的加强版,具体的分析看我 ...

  2. hdu 1505(dp求最大子矩阵)

    题意:就是让你求出全由F组成的最大子矩阵. 分析:这是hdu 1506的加强版,只不过这道题变成了2维的,那我们就一行一行的来.具体的分析见1506的博客:http://www.cnblogs.com ...

  3. hdu 1506(dp求最大子矩阵)

    题意:容易理解... 分析:对于每个单位矩阵,我们先求出连续比它高的最左边的下标假设为l,然后求出比它高的最右边的下标假设为r,然后矩阵的面积就是(r-l+1)*1:我们从左到 右扫一遍,求出每个点的 ...

  4. hdu1506(dp求最大子矩阵)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506 分析: 对于每个单位矩阵,我们先求出连续比它高的最左边的下标假设为l,然后求出比它高的最右边的下 ...

  5. hdu2870(dp求最大子矩阵)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2870 分析:分别转换成'a','b','c'三种来求,其实就跟hdu1505一样了... #inclu ...

  6. hdu 1506 Largest Rectangle in a Histogram ((dp求最大子矩阵))

    # include <stdio.h> # include <algorithm> # include <iostream> # include <math. ...

  7. BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp

    1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑 ...

  8. poj 1050 To the Max_dp求最大子矩阵和

    题意:求最大子矩阵和 利用dp[i]每次向下更新,构成竖起的单条矩阵,再按不小于零就加起来来更新,构成更大的矩阵 #include <iostream> #include<cstdi ...

  9. POJ1050To the Max(求最大子矩阵)

    题目链接 题意:给出N*N的矩阵,求一个子矩阵使得子矩阵中元素和最大 分析: 必备知识:求一组数的最大连续和 int a[N]; ,maxn = -INF; ; i <= n; i++) { i ...

随机推荐

  1. EasyUI - According 分类列表

    效果: html代码: <div id="aa" class="easyui-accordion" style="width: 300px; h ...

  2. guava之Joiner 和 Splitter(转)

    最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享.本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理. Joiner 首先我们来看看 ...

  3. high volume logging

    logging 是现在系统中必不可少的组件了.市面上已经有很多很多非常成熟的日志产品,log*系列就是一个典型代表.对于erlang系统来说,也有很多,比如error_logger, disk_log ...

  4. webview加载网页加载不出来

    1.webView.loadUrl(picTargetUrl); 写在最前面. 1.在无线城市迷你版的项目,用webview去loadUrl的时候出现加载的现象. url 地址是 http://go. ...

  5. Swift - 给表格TableView添加页眉和页脚

    UITableView具有var tableHeaderView:UIView?属性和var tableFooterView:UIView?属性,可以通过给其赋值来创建列表TableView的页眉和页 ...

  6. 基于Spring提供支持不同设备的页面

    基于Spring来检测访问Web页面的设备是很简单的,在这个经验中我们讲到过.通常不同的设备访问我们是通过响应式设计来统一处理各种设备的尺寸的.但是如果希望针对不同的设备,显示不同的内容呢? Spri ...

  7. 5款帮助简化的HTML5 Audio开发的Javascript类库

    HTML5的audio标签提供了我们方便控制声音的功能,可是使用原生的HTML5来开发声音或者音乐相关的项目仍旧很的麻烦.在今天这篇文章中,我们将介绍5款帮助你简化开发的javascript audi ...

  8. SQLServer行转列

    近期面试遇到了一道面试题.顿时有点迷糊,仅仅说出了思路.后来百度了一下.整理了一下思路,于是记录下来,方便以后学习.(面试题请參见附件) 相关的数据表: 1.Score表 2.[User]表 SQL语 ...

  9. Linux内核参数信息(Oracle相关)

    命令行:vim  /etc/sysctl.conf 查看如下两行的设置值,这里是: kernel.shmall = 2097152 kernel.shmmax = 4294967295 如果系统默认的 ...

  10. HDU3714 Error Curves (单峰函数)

    大意: 给你n个二次函数Si(x),F(x) = max{Si(x)} 求F(x)在[0,1000]上的最小值. S(x)=ax^2+bx+c       (0<=a<=100, |b|, ...