题目:
给定一个数字序列A1,A2…An,求i,j(1<=i<=j<=n),使得Ai+…+Aj最大,输出这个最大和。
例:
输入:6
-2 11 -4 13 -5 -2
输出:20
//枚举
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int a[N],s[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
int res=INT_MIN;
for(int i=1;i<=n;i++){
int tmp_sum=0;
for(int j=i;j<=n;j++)
{
tmp_sum+=a[j];
res=max(res,tmp_sum);
}
}
cout<<res<<endl;
return 0;
}
//前缀和
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int a[N],s[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1,j=1;i<=n;i++)
s[i]=s[i-1]+a[i];
int res=INT_MIN;
for(int i=2;i<=n;i++)
for(int j=1;j<=i-1;j++)
res=max(res,s[i]-s[j]);
cout<<res<<endl;
return 0;
}