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

【动态规划】最大子串和

时间限制: 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)

输出

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

样例输入

1
5
1 2 -1 3 -2

样例输出

5
 1 #include <iostream>
 2 #define INF 0x3f3f3f
 3 using namespace std;
 4
 5 int N,n,a,sum,maxx;
 6
 7 int main()
 8 {
 9     while(cin>>N)
10     {
11         while(N--)
12         {
13             cin>>n;
14             sum=0;
15             maxx=-INF;
16             for(int i=0;i<n;i++)
17             {
18                 cin>>a;
19                 if(a>=sum+a)
20                     sum=a;
21                 else
22                     sum+=a;
23                 if(maxx<sum)
24                     maxx=sum;
25             }
26             cout<<maxx<<endl;
27         }
28     }
29     return 0;
30 }
时间: 2024-10-21 16:00:35

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

HDU 1686 Oulipo【kmp求子串出现的次数】

The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e'. He was a member of the Oulipo group. A quote from the book: Tout avait Pair normal, mais tout s’affirmait faux. Tout avait Fair normal, d’abord, pu

动态规划题目(三)——最大连续乘积子串

动态规划题目(三)--最大连续乘积子串 1. 题目描述 给一个浮点数序列,取最大乘积连续子串的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积连续子串为3,0.5,8.也就是说,上述数组中,3 0.5 8这3个数的乘积30.58=12是最大的,而且是连续的. 2. 动态规划求解 动态规划求解题目的时候最重要的是要找到状态转移方程! 针对这道题目,我们使用两个变量记录当前最大值maxEnd, 和当前最小值minEnd.为什么记录当前最小值呢?因为数组中会出现负数,乘以一个负数的话

求子串-KPM模式匹配-NFA/DFA

求子串 数据结构中对串的5种最小操作子集:串赋值,串比较,求串长,串连接,求子串,其他操作均可在该子集上实现 数据结构中串的模式匹配 KPM模式匹配算法 基本的模式匹配算法 //求字串subString 在串string中的位置function subString(string, subString){ var i=0,j=0;//当i或j超出范围退出 while(i<string.length&&j<subString.length){ if(string[i]==subSt

hiho#1445 重复旋律5 求子串数量 后缀自动机

题目传送门 题意:给出一个字符串,求子串的个数. 思路:后缀自动机的题真是每做一题就更理解一些. SAM中的每一状态$p$都代表了一种子串,而p包含的字符串的个数是$len[p]-len[fa[p]]$,所以答案就是$sigma len[i]-len[fa[i]]$,还有答案要开long long. #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using namespace std; typedef long l

字符串中连续出现最多的子串 &amp; 字符串中最长重复子串

字符串中连续出现最多的子串 & 字符串中最长重复子串 字符串中连续出现最多的子串 & 字符串中最长重复子串,这两个问题都可以用后缀数组来表示,至于后缀数组可以参考编程珠玑P156:后缀数组就是定义一个数组指针,分别指向字符串中的对应位置,如下: a b c a b c a b c d e .substr[0] b c a b c a b c d e ....substr[1] c a b c a b c d e .......substr[2] a b c a b c d e ......

KMP模版 &amp;&amp; KMP求子串在主串出现的次数模版

int next[MAX_LEN]; void creat_next(char *S, int Sn) { int k, q; next[0] = 0; for(k=0, q=1; q<Sn; q++){ while(k>0 && S[k]!=S[q]) k = next[k-1]; if(S[k] == S[q]){ k++; } next[q] = k; } } bool Judge(char *S, char *T, int Sn, int Tn)//S是子串,T是主串

Blue Jeans---poj3080(kmp+暴力求子串)

题目链接:http://poj.org/problem?id=3080 题意就是求n个长度为60的串中求最长公共子序列(长度>=3):如果有多个输出字典序最小的: 我们可以暴力求出第一个串的所有子串,然后判断是否是其他的子串即可: #include<iostream> #include<stdio.h> #include<string.h> using namespace std; const int N = 107; char s[N][61]; int Nex

动态规划系列【4】最长公共子串

对于两个字符串,请设计一个时间复杂度为O(m*n)的算法(这里的m和n为两串的长度),求出两串的最长公共子串的长度.这里的最长公共子串的定义为两个序列U1,U2,..Un和V1,V2,...Vn,其中Ui   + 1 == Ui+1,Vi + 1 == Vi+1,同时Ui == Vi. 给定两个字符串A和B,同时给定两串的长度n和m. 测试样例: "1AB2345CD",9,"12345EF",7 返回:4 题意:求最长公共子串.子串是连续的.子序列是不连续的. p

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

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