Largest Rectangle in a Histogram(dp)
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)的更多相关文章
- hdu---1506(Largest Rectangle in a Histogram/dp最大子矩阵)
Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- HDU 1506 Largest Rectangle in a Histogram(DP)
Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- 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]的左边最远距离和小于 ...
- HDU1506 ( Largest Rectangle in a Histogram ) [dp]
近期情绪太不稳定了.可能是由于在找实习这个过程碰壁了吧.第一次面试就跪了,可能是我面的是一个新公司,制度不完好,我感觉整个面试过程全然不沾编程,我面试的还是软件开发-后来我同学面试的时候.说是有一道数 ...
- hdu 1506 Largest Rectangle in a Histogram ((dp求最大子矩阵))
# include <stdio.h> # include <algorithm> # include <iostream> # include <math. ...
- Largest Rectangle in a Histogram(DP)
Largest Rectangle in a Histogram Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K ...
- HDU 1506 Largest Rectangle in a Histogram (dp左右处理边界的矩形问题)
E - Largest Rectangle in a Histogram Time Limit:1000MS Memory Limit:32768KB 64bit IO Format: ...
- POJ 2559 Largest Rectangle in a Histogram (单调栈或者dp)
Largest Rectangle in a Histogram Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15831 ...
- NYOJ-258/POJ-2559/HDU-1506 Largest Rectangle in a Histogram,最大长方形,dp或者单调队列!
Largest Rectangle in a Histogram 这么经典的题硬是等今天碰到了原题现场懵逼两小时才会去补题.. ...
随机推荐
- (转)Quartz任务调度(1)概念例析快速入门
http://blog.csdn.net/qwe6112071/article/details/50991563 Quartz框架需求引入 在现实开发中,我们常常会遇到需要系统在特定时刻完成特定任务的 ...
- 初学JSP_内置对象
out内置对象: 表单,表单常用的的提交方式
- js的replace, 高亮
";console.log(str.replace(/\,/g, "")); //输出 123 ";console.log(str);//输出123 " ...
- 关于Staltstack
saltstate服务搭建: cat /etc/hosts(master和minion都添加) 127.0.0.1 localhost localhost.localdomain localhos ...
- Java类及成员
Java类及成员 类 类是对一类事物的的描述,是抽象的概念上的定义:类是创建对象的模板: public class TestClass { public static void main(String ...
- git对vue项目进行版本管理
生成本地仓库 步骤一:git init 步骤二:git add * 步骤三:git commit -m 'init team' 创建远程仓库 new responstory 复制关联代码的命令 将本地 ...
- 23.match_phrase_prefix实现search-time搜索推荐
主要知识点: 搜索推荐的使用场景 用法 原理 一.搜索推荐的使用场景 搜索推荐,就是在你做搜索时,当你写出一部搜索词时,es会自提示接下来要写的词,比如当你在搜索hello w 时,如果es中有如下文 ...
- Dijkstra算法求最短路径
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <limits.h&g ...
- AtCoder ABC 085C/D
C - Otoshidama 传送门:https://abc085.contest.atcoder.jp/tasks/abc085_c 有面值为10000.5000.1000(YEN)的纸币.试用N张 ...
- 【codeforces 527B】Error Correct System
[题目链接]:http://codeforces.com/contest/527/problem/B [题意] 给你两个字符串; 允许你交换一个字符串的两个字符一次: 问你这两个字符串最少会有多少个位 ...