子串和

来源:互联网 发布:光猫超级密码开启端口 编辑:程序博客网 时间:2024/05/01 08:20

给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最大,其中,1<=x<=y<=n。
输入
第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=<I<=100),表示数列中的所有元素。(0<n<=1000000)
输出
对于每组测试数据输出和最大的连续子串的和。




#include<iostream>
using namespace std;


#define max(a,b) a>b?a:b


int main()
{
int N, n,c;
cin >> N;
while (N--)
{
cin >> n;
cin >> c;//第一个数
int currsum = 0;//当前值先赋值为0
int mmax = c;//先假设第一个数为最大的
for (int i = 0; i < n - 1; i++)//只有n-1个数了
{
currsum = currsum < 0 ? c : currsum + c;//如果当前
//值为负数则不用加上去了,加上去会把数字变小。
mmax = max(currsum, mmax);//这是因为即使之前currsum是负数,但是
//突然来了一个很大的a,则会使得currsum被赋值为a,会很大。
cin >> c;
}
cout << mmax << endl;
}
return 0;
}

0 0
原创粉丝点击