HDU1506--Largest Rectangle in a Histogram (动态规划)
2013-11-16 09:38
260 查看
用动态规划的思想分别求出当前建筑向左边所能延伸的递减的(相等的也行)建筑高度的左边界和当前建筑向右边所能延伸的递减的(相等的也行)建筑高度的右边界。由右边界和左边界,即可得出长度,面积就是长度*高度。
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <math.h>
#define LL __int64
#define maxn 100005
using namespace std;
struct Build
{
LL height;
LL left;
LL right;
}b[maxn];
int main()
{
LL n;
while(scanf("%I64d",&n),n)
{
for(LL i=1;i<=n;i++)
{
scanf("%I64d",&b[i].height);
b[i].left=i,b[i].right=i;
}
b[0].height=-1,b[n+1].height=-1;
for(LL i=1;i<=n;i++)
{
while(b[i].height<=b[b[i].left-1].height)
{
b[i].left=b[b[i].left-1].left;
}
}
for(LL i=n;i>=1;i--)
{
while(b[i].height<=b[b[i].right+1].height)
{
b[i].right=b[b[i].right+1].right;
}
}
LL max=-1;
for(LL i=1;i<=n;i++)
{
LL sum=(b[i].right-b[i].left+1)*b[i].height;
if(sum>max)
max=sum;
}
printf("%I64d\n",max);
}
return 0;
}
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <math.h>
#define LL __int64
#define maxn 100005
using namespace std;
struct Build
{
LL height;
LL left;
LL right;
}b[maxn];
int main()
{
LL n;
while(scanf("%I64d",&n),n)
{
for(LL i=1;i<=n;i++)
{
scanf("%I64d",&b[i].height);
b[i].left=i,b[i].right=i;
}
b[0].height=-1,b[n+1].height=-1;
for(LL i=1;i<=n;i++)
{
while(b[i].height<=b[b[i].left-1].height)
{
b[i].left=b[b[i].left-1].left;
}
}
for(LL i=n;i>=1;i--)
{
while(b[i].height<=b[b[i].right+1].height)
{
b[i].right=b[b[i].right+1].right;
}
}
LL max=-1;
for(LL i=1;i<=n;i++)
{
LL sum=(b[i].right-b[i].left+1)*b[i].height;
if(sum>max)
max=sum;
}
printf("%I64d\n",max);
}
return 0;
}
相关文章推荐
- HDOJ 题目1506 Largest Rectangle in a Histogram(动态规划)
- hdu1506 Largest Rectangle in a Histogram (笛卡尔树)
- [HDU1506]Largest Rectangle in a Histogram[dp]
- HDU1506 Largest Rectangle in a Histogram(水DP)
- HDU1506: Largest Rectangle in a Histogram(最大子矩阵,好题动态优化左右边界)
- [hdu1506 Largest Rectangle in a Histogram]笛卡尔树
- HDU 1505 Largest Rectangle in a Histogram && HDU 1506 City Game(动态规划)
- HDU1506_Largest Rectangle in a Histogram
- POJ 2559 Largest Rectangle in a Histogram -- 动态规划
- hdu 1507 Largest Rectangle in a Histogram 动态规划计算最大面积
- hdoj-1506-Largest Rectangle in a Histogram【动态规划】
- HDU 1506 Largest Rectangle in a Histogram 【动态规划】
- HDU 1505 Largest Rectangle in a Histogram && HDU 1506 City Game(动态规划)
- hdu1506 & pku2559 Largest Rectangle in a Histogram
- 【DP】 hdu1506 Largest Rectangle in a Histogram
- HDU1506_Largest Rectangle in a Histogram
- Largest Rectangle in a Histogram(动态规划找最大矩形面积)
- POJ2559 HDU1506 ZOJ1985 Largest Rectangle in a Histogram【堆栈+水题】
- POJ2559 Largest Rectangle in a Histogram(比动态规划更快的方法——单调队列)
- HDU1506~Largest Rectangle in a Histogram(模拟)