1.最大子段和
【题意】给出一个长度为N的序列A1, A2,…, An,求最大连续和。即要求找到1≤i≤j≤N,使得Ai+Ai+1+…Aj尽量大,若结果小于0,则输出0。
【分析】当j确定时,S[j]-S[i-1]最大相当于S[i-1]最小,因此只需要扫描一次数组,维护“目前遇到过的最小S”即可。时间复杂度O(N)。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int N,ipt,prem,sum,ans;
scanf("%d",&N);
sum=0;prem=0;ans=0;
for(int i=1;i<=n;i++){
scanf("%d",&ipt);
sum+=ipt;
ans=max(ans,sum-prem)
prem=min(prem,sum);
}
return 0;
}