题目内容:
给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大.或者求出最大的这个和.例如(-2,11,-4,13,-5,2)的最大子段和为20,所求子区间为[2,4].
输入描述
第一行为一个整数n,表示数组有n个数据,第二行依次输入n个整数
输出描述
计算出n个整数中连续k个数的最大和
输入样例
5 1 2 3 4 5 7 6 -5 5 8 -13 5 7
输出样例
1514
#include<iostream> using namespace std; int main(){ int n,max=-10000; cin>>n; int *a=new int[n], *f=new int[n]; for(int i=0; i<n; ++i) cin>>a[i]; f[0]=a[0]; for(int j=1; j<n; ++j){ if(f[j-1]>0) f[j]=f[j-1]+a[j]; else f[j]=a[j]; if(max<f[j]) max=f[j]; } max=-1; for(int k=0; k<n; ++k) if(max<f[k]) max=f[k]; cout<<max<<endl; return 0; }