最大连续子列和

#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdio>
using namespace std;
#define N 20010
int a[N];
int main()
{
    int n;
    while(cin>>n){
        for(int i=0;i<n;i++)
            cin>>a[i];
        int s1=0,s2=0;
        for(int i=0;i<n;i++){
            s1+=a[i];
            if(s1>s2) s2=s1;
            else if(s1<0) s1=0;
        }
        cout<<s2<<endl;
    }
    return 0;
}

时间: 2024-08-29 11:18:24

最大连续子列和的相关文章

hdu1003 最大连续子列和(动态规划★★★☆☆)

解题思路: 利用动态规划方法求解最大子列和,对应输入数据a[i],会有数据dp[i].数组dp中的每个元素dp[i],表示以a[i]结尾的最大连续子列和.遍历dp数组,可以找出子列和最大值. if (dp[i-1] >=0){ dp[i] = dp[i-1] + a[i]; } else{ dp[i] = a[i] } #include <iostream> #include <stdio.h> #include <stdlib.h> using namespac

[LeetCode系列]最大连续子列递归求解分析

本文部分参考Discuss: LeetCode. 步骤1. 选择数组的中间元素. 最大子序列有两种可能: 包含此元素/不包含. 步骤2. 步骤2.1 如果最大子序列不包含中间元素, 就对左右子序列进行步骤1. 步骤2.2 如果最大子序列包含, 则结果很简单, 就是左子列的最大后缀子列(即包含左子列最后一个元素--中间元素)加上右子列的最大前缀子列(即包含右子列第一个元素--中间元素) 步骤3. 返回三者中的最大值(左子列最大值, 右子列最大值, 二者拼接最大值). 1 class Solutio

hdoj 1231 最大连续子列和

最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 31021    Accepted Submission(s): 13922 Problem Description给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j &

经典算法问题 - 最大连续子数列和

文章来自:http://conw.net/archives/9/ (不是抄袭,那是我自己的博客,源地址查看代码有高亮) 最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大.我们一起用多种方式,逐步优化解决这个问题. 为了更清晰的理解问题,首先我们先看一组数据:8-2 6 -1 5 4 -7 2 3第一行的8是说序列的长度是8,然后第二行有8个数字,即待计算的序列.对于这个序列,我们的答案应该是1

C++中求数组连续子向量的最大和(牛客剑指offer)

/////////////////////////////////////////////////////////////////// //HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学. //今天测试组开完会后,他又发话了:在古老的一维模式识别中, //常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决. //但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢? //例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开

vim生成连续数字列

功能描述:在vim中插入连续数字列 比如 1, 2, 3, 4, 5, ... 100, 命令:使用q命令录制自己的动作序列然后重复执行 准备工作: 首先输入起始数字,比如这里输入1和逗号,光标在当前行 动作序列如下: 1. normal模式下qa    即将动作记录放入寄存器a中,可以根据自己偏好使用寄存器 2. Y    复制整行 3. p    粘贴到下一行 4. f ,    向右查找到逗号, 5. h    光标右移一个字符 6. ctrl + a   数值加1 7. q    退出记

求最大和连续子向量问题的算法分析

1 问题描述 这是从<编程珠玑(第 2 版)>的第 8 章"算法设计技术"中看到的一个问题.问题的描述是这样的, "问题的输入是具有 n 个浮点数的向量 x,输出是输入向量的任何连续子向量中的最大和.例如,如果输入向量包含下面 10个元素:(31,-41,59,26,-53,97,-93,-23,84) 那么该程序的输出为x[2...6] 的总和,即 187." 当所有的数都是正数时,问题很容易解决,此时最大的子向量就是输入向量本身.但如果输入向量中含有

hdu1003 最大连续子序和

Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14. Input The first line of the input contains an inte

CDOJ 1104 求两个数列的子列的交集 查询区间小于A的数有多少个 主席树

求两个数列的子列的交集 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1104 Description 给两个数列A, B,长度分别为n1, n2,保证A中每个元素互不相同,保证B中每个元素互不相同..进行Q次询问,每次查找A[l1...r1]和B[l2..r2]的交集 集合 大小是多少.. 比如 A = {1,2,3,4,5,6,7},B = {7,6,5,4,3,2,1}