水题
最大子段和
时间限制: 1 Sec
内存限制: 128 MB
提交: 18 解决: 7
[ 提交][ 状态][ 讨论版]
题目描述
有一行n个数,在这一行数中取连续的一段,问取到的段的和最大为多少,段的长度至少要为1
输入
第一行一个数n(n<=1000),第二行是n个数,数的绝对值小于1000
输出
一个数,表示和最大的段的和
样例输入
5-2 4 -1 -1 3
样例输出
5
提示
4+(-1)+(-1)+3=5
本题目可以采用穷举法,也可以采用别的方法,一边输入一边储存的sum值与max值,在不断比较中得到max值,这类似于动态规划。
#include <iostream> using namespace std; int main() { int i,n; int max,num,sum; cin>>n; cin>>num; max = num; sum = max>0?max:0; for(i=1;i<n;i++){ cin>>num; sum+=num; if(sum>max) max = sum; if(sum<0) sum = 0; } cout<<max<<endl; }