7-1 最大子列和问题
输入格式:
输入第1行给出正整数K (≤100000);第2行给出K个整数,其间以空格分隔。
输出格式:
在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。
输入样例:
6
-2 11 -4 13 -5 -2
输出样例:
20
DP模板题
解题的关键在于状态转移方程dp[i]=max{A[i],dp[i-1]+A[i]}
其中dp[i]表示以i结尾的最大连续子列和,A[i]表示第i个元素。
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int a[100000];
int dp[100000];
int main()
{
int k;
int maxnum = 0;
cin >> k;
for (int i = 0; i < k; i++)
cin >> a[i];
dp[0] = a[0];
for (int i = 1; i < k; i++)
{
dp[i] = max(dp[i - 1] + a[i], a[i]);
if (dp[i] > maxnum)
maxnum = dp[i];
}
cout << maxnum;
}