-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path最大序列和.cpp
52 lines (45 loc) · 1.28 KB
/
最大序列和.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/*
给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。
对于S的所有非空连续子序列T,求最大的序列和。
变量条件:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。
*/
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void max_sub_sequence()
{
int n;
while(cin >> n){
vector<int> A;
int temp, min_num = 0;
while(n--){
cin >> temp;
A.push_back(temp);
if (temp < min_num) {
min_num = temp;
}
}
A.insert(A.begin(), -1);//在第零个位置插入一个负数
vector<int> dp(A.size()+1);
fill(dp.begin(), dp.end(), 0);
for(int i = 1; i <= A.size(); i++)
{
//以第i个位置数字为序列结尾的最大子序列
dp[i] = max(dp[i-1] + A[i], A[i]);
}
int max_num = min_num;
for(int i = 1; i <= A.size(); i++)
{
//遍历求出最大值
if (dp[i] > max_num) {
max_num = dp[i];
}
}
cout << max_num << endl;
}
}
int main()
{
max_sub_sequence();
}