4月13日题解

Posted qfnu-acm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4月13日题解相关的知识,希望对你有一定的参考价值。

仁慈的浩牛哥

涉及知识点:

  • 思维

solution:

  • (祝大家周一愉快)
  • (这个题目首先从数据范围我们知道,n^2的做法是不可取的)
  • (所以我们应该想到一种O(n)的做法,或者是O(nlogn),或者更好的做法)
  • (对于每个数我们都有被删除的可能性,所以对于当前的数字a[i],我们需要计算出这个数加上若干个前面连续的数的最大值)
  • (比如 5,-9,10,6,-3)
  • (的pre数组的值就是 5,-4,10,16,13)
  • (那么我们计算出next也就很简单了, 12,7,16,6,-3)
  • (那么我们再处理每个数删除情况就分为以下三种情况)
  • (pre[i - 1] + Next[i + 1],pre[i - 1],Next[i + 1] 三者中的最大值)

std:

#include <iostream>
#include <algorithm>
#include <vector>
#include <sstream>
using namespace std;

const int N = 1e5 + 10;

int a[N];
int pre[N];
int Next[N];

int n;
int main()
{
    cin >> n;
    int res = -0x3f3f3f3f;
    for(int i = 1;i <= n;i ++)
    {
        cin >> a[i];
    }
    
    int sum = 0;
    
    for(int i = 1;i <= n;i ++)
    {
        sum += a[i];
        res = max(res,a[i]);
        pre[i] = max(a[i],sum);
        if(sum < 0)sum = 0;
    }
    sum = 0;
    for(int i = n;i >= 0;i --)
    {
        sum += a[i];
        Next[i] = max(sum,a[i]);
        if(sum < 0)sum = 0;
        
    }
    
    for(int i = 1;i <= n;i ++)
    {
        res = max({pre[i - 1] + Next[i + 1],pre[i - 1],Next[i + 1],res});
    }
    
    cout << res << endl;
    
    return 0;
}

以上是关于4月13日题解的主要内容,如果未能解决你的问题,请参考以下文章

;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk

第八次作业——每周例行报告

4月13日作业

CSP2020 儒略日 题解

4月12日数字货币大奇迹日——4.13行情分析

如何获得这种类型的时间格式“2014 年 8 月 13 日,下午 4:04”使用strftime?

(c)2006-2024 SYSTEM All Rights Reserved IT常识