1.最大字段和
题目描述
给定n个整数(可能是负数)组成的序列a[1], a[2], a[3], …, a[n],求该序列的子段和如a[i]+a[i+1]+…+a[j]的最大值。
输入
每组输入包括两行,第一行为序列长度n,第二行为序列。
输出
输出字段和的最大值。
样例输入 Copy
5 -1 0 1 2 3
样例输出 Copy
6
这道题目有三种解法,常规暴力,分治和动态规划,在这里我用的是动态规划的方法。用一个b数组去存储最大的字段和。b[i]表示到a[i]截至最大的字段和。注意这个题是多组输入!
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
using namespace std;
int main()
{
int a[1000],b[1000];
int n;
while(cin>>n)
{
for(int i=0;i<n;i++)
cin>>a[i];
b[0]=a[0];
for(int i=1;i<n;i++)
{
if(b[i-1]>0)
b[i]=a[i]+b[i-1];
else
b[i]=a[i];
}
sort(b,b+n);
cout<<b[n-1]<<endl;
}
return 0;
}