老师给了一个最大连续子数列和的dp代码,但我没看懂,求大佬们简单说一下,谢谢[合十]
题干
给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空数列),使它们的和尽可能大。
样例
input
8
-2 6 -1 5 4 -7 2 3
output
14
Code
#include<stdio.h>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int A[10000],dp[10000];//A存序列,dp[i]存以i为结尾的连续序列的最大和
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&A[i]);
dp[0]=A[0];
for(int i=1;i<n;i++)
dp[i]=max(A[i],dp[i-1]+A[i]);
int k=0;
for(int i=1;i<n;i++)
{
if(dp[i]>dp[k])
k=i;
}
cout<<dp[k]<<endl;
return 0;
}
再次感谢