http://acm.hdu.edu.cn/showproblem.php?pid=1506

题意:给出n个矩形的高度,每个矩形的宽都为1,求相邻的矩形能组合成的最大的矩形的面积。

思路:求出比第i个矩形大的最左边的矩形的位置 l[i], 及比第i个矩形大的最右边的矩形的位置 r[i], 则第i个矩形的面积 s = (r[i]-l[i]+1)*hign[i]。

如果第i-1个矩形比第i个矩形大,则 l[i] 必定在 l[i-1]的 左边,同理,r[i]必定在 r[i+1]的右边。

 #include <stdio.h>
#include <string.h>
#include <algorithm>
#define LL __int64
const int N=;
using namespace std;
LL high[N],l[N],r[N];
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
for (int i = ; i <= n; i++)
scanf("%I64d",&high[i]);
for (int i = ; i <= n; i++)
{
int pos = i;
while(pos > && high[pos-] >= high[i])
{
pos = l[pos-];//如果第i个矩形左边的矩形(pos-1)比i高,
//则pos移动到l[pos-1](即比第pos-1个矩形高的最左边的矩形的位置)
}
l[i] = pos;//l[i]表示比第i个矩形连续高的最左边的矩形位置
}
for (int i = n; i >= ; --i)
{
int pos = i;
while(pos < n && high[i] <= high[pos+])
{
pos = r[pos+];
}
r[i] = pos;//表示比第i个矩形连续高的最右边的矩形位置
}
LL maxn = ;
for (int i = ; i <= n; i++)
{
maxn = max((r[i]-l[i]+)*high[i],maxn);
}
printf("%I64d\n",maxn);
}
return ;
}

同类型的题:

http://acm.hdu.edu.cn/showproblem.php?pid=1505

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#define LL __int64
const int N=;
using namespace std;
LL l[N],r[N],high[N]; LL max_area(int m)
{
for (int i = ; i <= m; i++)
{
if(i > && high[i] <= high[i-])
{
l[i] = l[i-];
}
else
l[i] = i;
}
for (int i = m; i >= ; i--)
{ if(i < m && high[i] <= high[i+])
{
r[i] = r[i+];
}
else
r[i] = i;
}
LL maxn = ;
for (int i = ; i <= m; i++)
{
maxn = max((r[i]-l[i]+)*high[i],maxn);
}
return maxn;
}
int main()
{
int t;
char s[];
scanf("%d",&t);
while(t--)
{
int n,m;
LL ans = ;
scanf("%d %d",&n,&m);
memset(high,,sizeof(high));
for (int i = ; i <= n; i++)
{
for (int j = ; j <= m; j++)
{
scanf("%s",s);
if (s[]=='F')
high[j]++;
else
high[j] = ;
}
ans = max(max_area(m),ans);//第一行到第i行最大的面积
}
printf("%I64d\n",ans*);
}
return ;
}

Largest Rectangle in a Histogram(dp)的更多相关文章

  1. hdu---1506(Largest Rectangle in a Histogram/dp最大子矩阵)

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  2. HDU 1506 Largest Rectangle in a Histogram(DP)

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  3. BNUOJ-15505 Largest Rectangle in a Histogram DP

    题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=15505 每个h[i]维护两个值l[i]和r[i],分别表示大于h[i]的左边最远距离和小于 ...

  4. HDU1506 ( Largest Rectangle in a Histogram ) [dp]

    近期情绪太不稳定了.可能是由于在找实习这个过程碰壁了吧.第一次面试就跪了,可能是我面的是一个新公司,制度不完好,我感觉整个面试过程全然不沾编程,我面试的还是软件开发-后来我同学面试的时候.说是有一道数 ...

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

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

  6. Largest Rectangle in a Histogram(DP)

    Largest Rectangle in a Histogram Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K ...

  7. HDU 1506 Largest Rectangle in a Histogram (dp左右处理边界的矩形问题)

    E - Largest Rectangle in a Histogram Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format: ...

  8. POJ 2559 Largest Rectangle in a Histogram (单调栈或者dp)

    Largest Rectangle in a Histogram Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15831 ...

  9. NYOJ-258/POJ-2559/HDU-1506 Largest Rectangle in a Histogram,最大长方形,dp或者单调队列!

                                         Largest Rectangle in a Histogram 这么经典的题硬是等今天碰到了原题现场懵逼两小时才会去补题.. ...

随机推荐

  1. 使用whIle循环语句和变量打印九九乘法表

    -设置i变量declare @i int --设置j变量declare @j int --设置乘法表变量declare @chengfabiao varchar(1000)--给i,j,@chengf ...

  2. u-boot常用命令

    查看ip地址等信息 print tftp相关 设置ip地址 set ipaddr 192.168.1.5 设置tftp所在电脑ip set serverip 192.168.1.8 最后必须输入sav ...

  3. pythonGUI编程——Qt库(1)

    1.简单示例实现一个小窗口.       PyQt5是一种高级的语言,下面只有几行代码就能显示一个小窗口.底层已经实现了窗口的基本功能. #!/usr/bin/python#coding:utf-8# ...

  4. 洛谷——P2504 [HAOI2006]聪明的猴子

    P2504 [HAOI2006]聪明的猴子 题目描述 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上. ...

  5. LOJ——#6277. 数列分块入门 1

    ~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法——分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...

  6. office 2016最新安装及激活教程(KMS)【亲测有效】!!

    前言 博主的一个朋友,咳咳--你们懂得,想装office,于是我就上网找了一下激活的方法,亲测有效,而且也没有什么广告病毒之类的,还比较方便,所以传上来方便大家.好了,进入正题: 安装office 首 ...

  7. linux安装openjdk

    使用yum查找jdk: yum search java | grep jdk 执行安装命令:yum install java-1.8.0-openjdk

  8. JavaScript学习笔记之对象

    目录 1.自定义对象 2.Array 3.Boolean 4.Date 5.Math 6.Number 7.String 8.RegExp 9.Function 10.Event 在 JavaScri ...

  9. python--(协程 和 I/O多路复用)

    python--(协程 和 I/O多路复用) 一.协程 1. >>>单线程下实现并发, 最大化线程的效率, 检测 IO 并自动切换,程序级别的任务切换, 之前多进程多线程都是系统级别 ...

  10. Linux - redis持久化RDB与AOF

    目录 Linux - redis持久化RDB与AOF RDB持久化 redis持久化之AOF redis不重启,切换RDB备份到AOF备份 确保redis版本在2.2以上 实验环境准备 备份这个rdb ...