最大子序列(基础版)

751 词

题目描述

给定一整型数列${a1,a2…,an}$,找出连续非空子串${ax,ax+1,…,ay}$,使得该子序列的和最大,其中,$1<=x<=y<=n$。

输入

第一行是一个整数$N$ $(N<=10)$表示测试数据的组数
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数$I$ $(-1000=I<=1000)$,表示数列中的所有元素。$(0<n<=100)$

输出

对于每组测试数据输出和最大的连续子串的和。

样例输入

1
2
3
1
5
1 2 -1 3 -2

样例输出

1
5

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int T;
cin>>T;
int tmp[10001];
int arr[10001];
while(T--) {
int n;
cin >> n;
fill(arr, arr + n, 0);
for (int i = 0; i < n; i++)cin >> tmp[i];
arr[0] = tmp[0];
for (int i = 1; i < n; i++)arr[i] = max(arr[i], arr[i - 1] + tmp[i]);
cout << *max_element(arr, arr + n) << endl;
}
return 0;
}