zoukankan      html  css  js  c++  java
  • 【P2422】良好的感觉(单调栈优化DP//奇怪的暴力)

    话说正解是单调栈优化DP,然而貌似根据某种玄学的推算,这个题暴力出解貌似也是可以的。首先,我们枚举所有的点作为最小点,然后横向展开,遇到更小的就停止。。。然后再操作一下,看上去时间O(N^2),然而由于数据的随机生成性,差不多能做到O(NlogN)出解,然而由于数据的过于随机性,这么做比正解还要快。。。但是如果数据整齐的话应该怎么办呢,比如都是同一个数的情况。。

    这时我们可以先排序,从最大的开始搜起,然后如果有进行最优性剪枝,复杂度貌似可以保证在O(NlogN^2)左右。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #define re register
    #define wc 0.0000000001
    using namespace std;
    struct point
    {
        int v,id;
    };
    point a[10000001];
    long long n,d[1000001],ans,maxx,lt,sum;
    inline bool cmp(point x,point y)
    {
        return x.v>y.v;
    }
    int main()
    {
        cin>>n;
        for(re int i=1;i<=n;i++)
        {
            cin>>d[i];
            a[i].v=d[i];
            a[i].id=i;
            sum+=d[i];
        }
        sort(a+1,a+n+1,cmp);
        for(re int i=1;i<=n;i++)
        { 
            if(a[i].v*sum<=ans)
            continue;
            int l=a[i].id,r=a[i].id;
            long long cnt=a[i].v;
            while(d[l-1]>=a[i].v)
            {
                cnt+=d[l];
                l--;
            }
            while(d[r+1]>=a[i].v)
            {
                cnt+=d[r];
                r++;
            }
            maxx=a[i].v*cnt;
            ans=max(maxx,ans);
        }
        cout<<ans;
    }
  • 相关阅读:
    day01
    用表单验证数据(1)
    用表单验证数据
    表单
    ORM作业
    mysql完全卸载大全
    mycat特点及用途
    ajax 跨域请求解决方案
    myeclipse使用SVN团队开发
    配置mybatis错误总结
  • 原文地址:https://www.cnblogs.com/victorique/p/8426820.html
Copyright © 2011-2022 走看看