码迷,mamicode.com
首页 > 其他好文 > 详细

hdu Largest Rectangle in a Histogram

时间:2015-04-09 00:47:24      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

这道题目是一道动态规划的题目,动态规划的点不在面积上,而在每个矩形可左右扩展的坐标上。找出每个矩形最左边和最右边比它高的矩形的下标,最后求面积即可;

技术分享
#include"stdio.h"
__int64 h[100010],ans,temp;
int l[100010],r[100010];
int main()
{
    int n,i,j;
    while(scanf("%d",&n),n)
    {
        for(i=1;i<=n;i++)
        {
            scanf("%I64d",&h[i]);
            l[i]=r[i]=i;
        }
        h[0]=h[n+1]=-1;
        for(i=1;i<=n;i++)
        {
            while(h[l[i]-1]>=h[i])
                l[i]=l[l[i]-1];
        }
        for(i=n;i>=1;i--) //注意这个顺序,tle了好几次都是因为用的是i++,i<=n
        {
            while(h[r[i]+1]>=h[i])
                r[i]=r[r[i]+1];
        }
        ans=0;
        for(i=1;i<=n;i++)
        {
            temp=h[i]*(r[i]-l[i]+1);
            if(temp>ans) ans=temp;
        }
       printf("%I64d\n",ans);
    }
    return 0;
}
View Code

 

hdu Largest Rectangle in a Histogram

标签:

原文地址:http://www.cnblogs.com/acm-jing/p/4404839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!