动态规划之P1115 最大子段和

来源:互联网 发布:pure codec for mac 编辑:程序博客网 时间:2024/06/07 18:18

题目描述

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

输入输出格式

输入格式:

输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度。

第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列。

输出格式:

输入文件maxsum1.out仅包括1个整数,为最大的子段和是多少。子段的最小长度为1。

输入输出样例

输入样例#1:
72 -4 3 -1 2 -4 3
输出样例#1:
4
  • 题解
对于这类题:
非空:f[i]=max(f[i-1],0)+a[i]
可空:f[i]=max(f[i-1]+a[i],0);
#include <bits/stdc++.h>using namespace std;const int maxn=200000+100;int a[maxn],f[maxn];int main(){    //freopen("input.txt","r",stdin);    int n;    scanf("%d",&n);    for(int i=1;i<=n;i++)        scanf("%d",&a[i]);    memset(f,0,sizeof(f));    for(int i=0;i<=n;i++)        f[i]=max(f[i-1],0)+a[i];    printf("%d\n",*max_element(f+1,f+n+1));    return 0;}



原创粉丝点击