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";
}
CAD加油!欢迎跟我一起讨论学习算法,QQ:1401650042