zoukankan      html  css  js  c++  java
  • hdu Largest Rectangle in a Histogram

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

    #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
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    C#
    C#
    C#
    创建一个ROS包
    创建一个工作空间
    ROS的文件系统
    单一职责原因
    策略模式
    UML类图
    简单工厂模式
  • 原文地址:https://www.cnblogs.com/acm-jing/p/4404839.html
Copyright © 2011-2022 走看看