问题描述 :
对于一个给定的长度为N的整数序列A,它的“子序列”的定义是:A中非空的一段连续的元素(整数)。你要完成的任务是,在所有可能的子序列中,找到一个子序列,该子序列中所有元素的和是最大的(跟其他所有子序列相比)。程序要求你输出这个最大值。
输入说明 :
输入文件的第一行包含一个整数N,第二行包含N个整数,表示A。
其中:
1 <= N <= 100000
-10000 <= A[i] <= 10000
输出说明 :
输出仅包含一个整数,表示你算出的答案。
输入范例 :
5
3 -2 3 -5 4
输出范例 :
4
完整C++代码
一道经典的动规题,题解就不写了,直接点击跳转LeetCode原题,里面全是大佬的题解😂
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
const ll maxx = 1e5 + 10;
ll num[maxx];
int main()
{
while (cin >> n) {
for (ll i = 0; i < n; i++) {
cin >> num[i];
}
ll max_sum = num[0], temp = num[0];
for (ll i = 1; i < n; i++) {
temp = max(num[i], temp + num[i]);
max_sum = max(max_sum, temp);
}
cout << max_sum << endl;
}
return 0;
}
😋欢迎大伙私信或者评论区交流讨论😋