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. C# WebKitBrowser 设置内容

    WebKit.WebKitBrowser kitBrowser = new WebKit.WebKitBrowser(); kitBrowser.Dock = DockStyle.Fill; // k ...

  2. Review:Microbiota, metagenome, microbiome傻傻分不清

    Microbiota 微生物群   微生物群是指研究动植物体上共生或病理的微生物生态群体.微生物群包括细菌.古菌.原生动物.真菌和病毒.研究表明其在宿主的免疫.代谢和激素等方面非常重要.近义词Micr ...

  3. git 如何创建一个分支

    参考: https://jingyan.baidu.com/article/adc81513b95a20f723bf73bf.html 首先进入本地git仓库目录下,打开git bash环境 使用gi ...

  4. jenkins配置邮件通知

    参考: https://www.cnblogs.com/imyalost/p/8781759.html 谢谢大佬~

  5. Ubuntu 常用解压与压缩命令

    参考 https://blog.csdn.net/songbinxu/article/details/80435665 示例: 把/home/wangju/gitlab/automationTest目 ...

  6. django-Celery分布式队列简单使用

    介绍: Celery 是一个简单.灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具. 它是一个专注于实时处理的任务队列,同时也支持任务调度. worker:是一个独立的进程, ...

  7. Java中Math对象的属性与方法

    Math.sqrt() ——————>计算平方根Math.cbrt()————————>计算立方根Math.pow(a, b)——————————>计算a的b次方Math.max( ...

  8. div+css 组织结构

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>家谱 ...

  9. 【7】Django网页视图模板处理

    天下难事必作於易.天下大事必作於细.是以圣人终不为大,故能成其大 --老子<道德经> 本节内容 HTML页面的渲染 使用页面模板 异常处理 超链接路径处理 路由命名空间 1. HTML页面 ...

  10. LA 4329 Ping pong

    #include <iostream> #include <cstring> #include <cstdio> using namespace std; ; ; ...