【洛谷P1115】最大子段和

来源:互联网 发布:软件源代码出售合同 编辑:程序博客网 时间:2024/06/03 19:55

【洛谷P1115】最大子段和

Description

给出一段序列,选出其中连续且非空的一段使得这段和最大。

Input

输入文件的第一行是一个正整数N,表示了序列的长度。第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列。

Output

输入文件仅包括1个正整数,为最大的子段和是多少。

Sample Input

72 -4 3 -1 2 -4 3

Sample Output

4

Hint

【数据规模与约定】  对于40%的数据,有N ≤ 2000。  对于100%的数据,有N ≤ 200000。

题目分析

典型序列DP问题状态:f[i] 以i结尾的序列的最大和状态转移方程:d[i]=max(m[i],d[i-1]+m[i]); 
#include <iostream>#include <cstdio>#include <cstring>#include<queue>using namespace std;int m[200001];int d[200001]; //状态:以i结尾的序列的最大和int main(){    int n;    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        scanf("%d",m+i);        d[i]=m[i];      }      int maxx=-1e+8;      for(int i=1;i<=n;i++)    {        //状态转移:f[i-1]+d[i] 与 d[i]中的较大和         d[i]=max(m[i],d[i-1]+m[i]);         maxx=max(d[i],maxx);      }      printf("%d",maxx);    return 0;}
0 0
原创粉丝点击