题目描述
给定一个数组a[0,...,n-1],求其最大子数组(长度>=1)和
输入描述
第一行一个整数n(1<=n<=5000),然后依次输入n个整数(每个整数范围[-5000, 5000])
输出描述
输出一个整数表示最大子数组和
题目解读:
题目是求一个给定的数组的最大子数组和,就是说一个给定的数组中,求其中连续的元素构成的多个子数组的和的最大值。
因为是数组,隐含着要求元素是连续的,所以不需要考虑取出数组中的所有正数相加的这种情况。
程序如下:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n = 0;
do{
cin>>n;
}while(n<1 ||n>5000);
vector<int> arr(n);
for(int i = 0;i<n;i++){
do{
cin>>arr[i];
}while(arr[i] < -5000 || arr[i] > 5000);
}
cout<<endl;
int sum=0;
int max=0;
for(int i = 0;i<arr.size();++i){
sum = 0;
for(int j = i;j<arr.size();++j){
sum += arr[j];
if(sum>max)
max = sum;}
}
cout<<max;
system("pause");
return 0;
}