题目链接
题目大意
给你一个长小于等于1e5的数组,-30<=a[i]<=30,求连续的一段区间内,max(数组元素总和减去区间内数组的最大值的答案)
题目思路
此题比较巧妙,其实这种题目看到a[i]的取值范围就要想到枚举最大值,然后就行了
代码
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e5+5;
int n,a[maxn],ans;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int ma=1;ma<=30;ma++){//枚举区间最大值
int temp=0;
for(int i=1;i<=n;i++){
if(a[i]>ma){
temp=0;
}else{
temp+=a[i];
if(temp<0){
temp=0;
}else{
ans=max(ans,temp-ma);
}
}
}
}
printf("%d\n",ans);
return 0;
}