Yet Another Yet Another Task

D - Yet Another Yet Another Task

这个题的思考角度很独特,它是通过遍历子段中的最大值来实现的,这样我们就只用找到段内元素小于当前最大值的,最大连续段的和即可。比我之前想的一个 dp 方便多了…

我感觉这些题很多时候考察的都是思考问题的角度,而不是考察思维能力的极限,所以当思考一个问题思考到大脑已经无法处理的时候,那就换一个角度吧。

// Created by CAD on 2020/5/29.
#include <bits/stdc++.h>
using namespace std;

const int maxn=1e5+5;
int a[maxn];

int main(){
    int n;cin>>n;
    for(int i=1;i<=n;++i)
        cin>>a[i];
    int ans=0;
    for(int i=1; i <= 30; ++i){
        int sum=0;
        for(int j=1;j<=n;++j){
            sum+=a[j];
            if(a[j]>i||sum<0) sum=0;
            else ans=max(ans,sum-i);
        }
    }
    cout<<ans<<"\n";
}
posted @ 2020-05-29 19:34  caoanda  阅读(212)  评论(0编辑  收藏  举报