h1506动态规划

来源:互联网 发布:手机淘宝二手市场在哪 编辑:程序博客网 时间:2024/05/21 11:16

这道题写的时候参考了网上的思路,用了递推,然而超时

然后再参考了别人的,发现了为什么超时,可以说用了动态规划的精髓吧呵呵呵

如果不会了,再写一遍

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
long long int a[100005];
int l[100005],r[100005];
int main()
{
    int n;
    while(scanf("%d",&n)&&n!=0)
    {
        for(int i=1; i<=n; i++)
        {
            scanf("%lld",&a[i]);
            l[i]=r[i]=i;
        }
        long long int imax=0,sum;
        a[0]=a[n+1]=-1;
        for(int i=1;i<=n;i++)    
        {                        
            while(a[l[i]-1]>=a[i])
                l[i]=l[l[i]-1];
        }
        
        for(int i=n;i>=1;i--)
        {
            while(a[r[i]+1]>=a[i])
                r[i]=r[r[i]+1];
        }
        
        for(int i=1;i<=n;i++)
        {
            sum=a[i]*(r[i]-l[i]+1);
            imax=max(imax,sum);
        }
        printf("%lld\n",imax);
    }
    return 0;
}

0 0
原创粉丝点击