• C. Four Segments 前缀后缀


    C. Four Segments

    这种分成了三个节点一般都可以处理一下前缀处理一下后缀,或者处理一下前面的这个点,处理一下后面的这个点,然后再枚举中间这个点。

    如果和中间这个点有关的,那么就可以换一下顺序,先枚举中间这个点,然后处理前面和后面的点。

    这个是先枚举中间这个点,然后往前面贪心,往后面贪心。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <queue>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <iostream>
    #include <map>
    #include <list>
    #define inf 0x3f3f3f3f
    #define inf64 0x3f3f3f3f3f3f3f3f
    using namespace std;
    typedef long long ll;
    const int maxn = 5e3 + 10;
    ll sum[maxn], a[maxn];
    
    int main()
    {
        int n;
        scanf("%d", &n);
        for (int i = 1; i <= n; i++) scanf("%lld", &a[i]), sum[i] = sum[i - 1] + a[i];
        ll ans = 0, x = 1, y = 1, z = 1;
        for(int i=1;i<=n;i++)
        {
            ll res1 = 0, mark1 = 1;
            for (int j = i; j <= n + 1; j++) {
                ll num = sum[j - 1] * 2 - sum[i - 1] - sum[n];
                if (num > res1)    res1 = num, mark1 = j;
            }
            ll res2 = 0, mark2 = 1;
            for (int j = 1; j <= i; j++) {
                ll num = 2 * sum[j - 1] - sum[i - 1];
                if (num > res2) res2 = num, mark2 = j;
            }
            if(res1+res2>ans)
            {
                ans = res1 + res2;
                x = mark2, y = i, z = mark1;
                // printf("ans=%d
    ", ans);
            }
        }
        printf("%lld %lld %lld
    ", x - 1, y - 1, z - 1);
        return 0;
    }
    View Code
  • 相关阅读:
    新概念4-38
    新概念4-37
    新概念4-36
    新概念4-35
    国史通鉴-03 天下为私 04
    新概念4-34
    西门子 框架断路器 及其他中低压配电设备资料查询
    OPC UA 的本质
    经典Scout添加等时同步设备
    同步报故障解同步启动
  • 原文地址:https://www.cnblogs.com/EchoZQN/p/11405160.html
Copyright © 2020-2023  润新知