【动态规划】最大子串和

问题 G: 【动态规划】最大子串和

时间限制: 1 Sec  内存限制: 128 MB
提交: 33  解决: 22
[提交][状态][讨论版]

题目描述

给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最大,其中,1<=x<=y<=n。

输入

第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=<I<=100),表示数列中的所有元素。(0<n<=1000000)

输出

对于每组测试数据输出和最大的连续子串的和。

样例输入

1
5
1 2 -1 3 -2

样例输出

5解题思路:参照http://www.cnblogs.com/TWS-YIFEI/p/5590532.html代码:
#include <iostream>
#include <cstdio>

using namespace std;

int a[1000005];
int sum[1000005];

int main()
{
    int N;
    long int n;
    long int ans=0;
    scanf("%d",&N);
    for(int z=0;z<N;z++){
        scanf("%ld",&n);
        for(long int i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        ans=0;
        sum[0]=a[0];
        for(long int i=1;i<n;i++){
            if(sum[i-1]>0){
                sum[i]=sum[i-1]+a[i];
            }else{
                sum[i]=a[i];
            }
            if(ans<sum[i]){
                ans=sum[i];
            }
        }
        if(z!=N-1){
            printf("%d\n",ans);
        }else{
            printf("%d",ans);
        }
    }
    return 0;
}
时间: 2024-10-14 03:07:53

【动态规划】最大子串和的相关文章

动态规划——最大子串和

如   {-4, 11,-2, 13,-7,-3,12} 的最大子段和为22 程序代码: #include<iostream>  #define MAXSIZE 100  using namespace std;  int MaxSum(int[],int);  int main(void)  {      int n;      int array[MAXSIZE];      while(cin>>n)      {          for(int i=1;i<=n;i

回文分割

周末女朋友不在家,打算做几题LeetCode的题目练练手,Pick One,随机抽中Palindrome Partitioning,题目如下: Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of s. For example, given s = "aab", Ret

【解题报告】[动态规划] - PID90 / 未出现的子串

原题地址:http://www.rqnoj.cn/problem/90 解题思路:题目看起来不太像动态规划... 我用一个数组f[i][j]来表示在数组第i个元素的后面第一次出现j的位置,为-1则是没出现过. 然后每次查找最大的位置即可.如题目例子中: f   1  3  5  2  4  1  3  5  2  2  2  2  3  4  1  5  3  2----------------------------------------------------------- 1  1  6

动态规划之最长公共子串

一 问题引入 在生物学中,经常需要比较两个不同生物的DNA,一个DNA串由由一串称为碱基的的分子组成,碱基有鸟嘌呤,腺嘌呤,胞嘧啶,胸腺嘧啶四中,我们用英文字母的首字母表示四种碱基,那么DNA就是在有限集{A,C,G,T}上的一个字符串.例如某种生物的DNA序列为:S1=ACCGGTCGAGTGCGCGGAAGCCGGCCGAA,S2=GTCGTTCGGAATGCCGTTGCTCTGTAAA,我们比较两个DNA串的原因就是希望确定他们的相似度,作为衡量两个物种相似度的标准.如果一个串是另外一个串

[leetcode]53Maximum Subarray动态规划经典题目:最大子串问题

/** * Find the contiguous subarray within an array (containing at least one number) * which has the largest sum. For example, given the array [-2,1,-3,4,-1,2,1,-5,4], the contiguous subarray [4,-1,2,1] has the largest sum = 6. click to show more prac

动态规划算法之:最长公共子序列 & 最长公共子串(LCS)

1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.而最长公共子序列则并不要求连续. 2.最长公共子串 其实这是一个序贯决策问题,可以用动态规划来求解.我们采用一个二维矩阵来记录中间的结果.这个二维矩阵怎么构造呢?直接举个例子吧:"bab"和"caba"(当然我们现在一眼就可以看出来最长公共子串是"ba"或"ab") b a b c 0 0 0 a 0 1

动态规划——最长公共子串

引入: 最长公共子序列常用于解决字符串的相似度问题. 最长公共子序列(Longest Common Subsequence,LCS)与最长公共字串(Longest Common Substring):子串是串的一个连续的部分,子序列则是从不改变序列顺序,而从序列中去掉任意多个元素而获得的新的序列:也就是说,子串中字符的位置一定是连续的,而子序列不一定连续. a  not the 之一(得到的未必就是唯一的那个最长公共子串,只有长度是唯一的) --其余字符串问题,待续 解决方案: 1.穷举法(Br

【动态规划】最大子串和(和前面那个求子串基本一样)

[动态规划]最大子串和 时间限制: 1 Sec  内存限制: 128 MB 题目描述 给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最大,其中,1<=x<=y<=n. 输入 第一行是一个整数N(N<=10)表示测试数据的组数) 每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=<I<=100),表示数列中的所有元素.(0<n<=1000000) 输出 对于

算法作业6 动态规划 - 最长公共子串问题

问题描述:Given 2 sequences, X = x1,...,xm and Y = y1,...,yn, find a common subsequence whose length is maximum. Subsequence need not be consecutive, but must be in order. 程序思路: 使用递归的思路可以解决这个问题.设输入的两个子串为X[0…m - 1]和Y[0…n - 1],L(X[0…m - 1], Y[0…n - 1])为X和Y的