liwei的专栏

记录生活与学习的点点滴滴

动态规划:E - Largest Rectangle in a Histogram(即HDU 1506)
题意就是求出最大矩形的面积。开始觉得好像不需要用DP,然后就直接搞了就T了;然后又优化一下,看看能不能用记忆递归搞定,但是记忆的时候实行不了也以失败告终……委屈后来还是又回到了DP上,感觉这题好像跟DP没关系啊,搞了好久不太会,后面参考了下别人的,才知道向左搜索的时候dpl[i]=dpl[dpl[i]-1]这样做,这就是DP,我好晕……这也叫DP啊!!!真不理解,这不就是一般的解法嘛!!太晕了……刚才和队友们聊天的时候,队友说生活要用DP的思想啊……哭太神了!
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#include<stack>
#include<ctime>
#include<cstdlib>
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
using namespace std;
int h[100005],dpl[100005],dpr[100005];
int main()
{
    int n,i,j;
    while(scanf("%d",&n)&&n)
    {
        for(i=1; i<=n; i++)
            scanf("%d",&h[i]);
        for(i=1,j=n; i<=n,j>=1; i++,j--)
        {
            dpl[i]=i;
            dpr[j]=j;
            while(dpl[i]>1&&h[dpl[i]-1]>=h[i])
                dpl[i]=dpl[dpl[i]-1];
            while(dpr[j]<n&&h[dpr[j]+1]>=h[j])
                dpr[j]=dpr[dpr[j]+1];
        }
        ll m=-1;
        for(i=1; i<=n; i++)
            m=max(m,(ll)h[i]*(dpr[i]-dpl[i]+1));
        cout<<m<<endl;
    }
    return 0;
}

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

动态规划:E - Largest Rectangle in a Histogram(即HDU 1506)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭