动态规划 - 子串和

子串和

时间限制:5000 ms  |  内存限制:65535 KB

难度:3

描述
给定一整型数列{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

代码为借鉴,点击此处到源代码:

#include<string.h>
#include<stdio.h>
#include<limits.h>
#define Max 1000000
int a[Max+1];

int main()
{
	memset(a,0,sizeof(a));//将数组初始化为0
	int t,n,i;
	scanf("%d",&t);
	while(t--)
	{
		int max = -INT_MAX;//int型的最小数字
		scanf("%d",&n);
		for(i=1;i<=n;++i)//遍历每一个数字
		{
			scanf("%d",&a[i]);
			if(a[i-1]>0)//寻找存在大于0的和
				a[i] += a[i-1];   //从 i 连续到此的最大和 ,a[i]存储的并不是前i项的和
			if(a[i] > max)
				max = a[i];       //i之前总的最大值
		}
		printf("%d\n",max);
	}
	return 0;
}

下面给出每一步的具体数据变化,帮助理解代码

时间: 2024-07-30 07:12:38

动态规划 - 子串和的相关文章

【解题报告】[动态规划] - 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串的原因就是希望确定他们的相似度,作为衡量两个物种相似度的标准.如果一个串是另外一个串

【动态规划】最大子串和

问题 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),表示数列中

[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的

《算法导论》读书笔记之动态规划—最长公共子序列 &amp; 最长公共子串(LCS)

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