Yet Another Yet Another Task

题意:

长度为 (n) 的数组,可以选取一段连续区间去掉其中的一个最大值求和,问求和的最大值为多少。
(-30leq a[i]leq 30)
传送门

分析:

一开始考虑问题的时候, 想得比较偏,一直把重点放在如何找出区间上。
正解:
枚举区间的最大值,求和,必然可以求出答案。
Yet Another Yet Another Task
请注意,如果最大总和段上的值等于 mx,则可以忽略这一事实。如果没有,您将使用比实际值小的值更新答案。令最大和段上的实际最大值为 y。
您可以看到,对于 y 和 mx 之间的任何值,最大总和段将始终是所选的那个。因此,当您达到 y 时,将使用正确的值更新答案。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
const int inf=0x3f3f3f3f;
int a[N];
int main()
{
    int n,ans=-inf;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=-30;i<=30;i++)
    {
        int sum=0;
        for(int j=1;j<=n;j++)
        {
            if(a[j]<=i)
            {
                sum=max(0,sum)+a[j];
                ans=max(ans,sum-i);
            }
        }
    }
    printf("%dn",ans);
    return 0;
}

原文链接: https://www.cnblogs.com/1024-xzx/p/12993913.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    Yet Another Yet Another Task

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/351863

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午7:11
下一篇 2023年3月2日 上午7:12

相关推荐