NYOJ 44 最大字串合

子串和

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

输入数据很多,推荐使用scanf进行输入

#include<cstdio>
#include<iostream>
#include<climits>
using namespace std;
const int MAX=1000010;
int a[MAX]={0};
int main()
{
    int n,m,maxsum;
    scanf("%d",&n);
    while(n--)
    {
        maxsum=-INT_MAX;
        scanf("%d",&m);
        for(int i=1;i<=m;++i)
        {
            scanf("%d",&a[i]);
            if(a[i-1]>0) a[i]+=a[i-1]; //递推
            if(a[i]>maxsum) maxsum=a[i];  //a[i]只会增大不会减小,最优保存
        }
        printf("%d\n",maxsum);
    }
}  
时间: 2024-10-21 08:19:57

NYOJ 44 最大字串合的相关文章

NYOJ 44 字串和

子串和 时间限制: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) 输出 对于

nyoj 37回文串

述所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串.现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串. 输入 第一行给出整数N(0<N<100)接下来的N行,每行一个字符串,每个字符串长度不超过1000. 输出 每行输出所需添加的最少字符数 dp[i][j]=dp[i+1][j] s[i]==s[j]            

leetcode——Longest Substring Without Repeating Characters 求链表中无重复字符的最大字串长度(AC)

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

最大字串和

最大字串和: #include <iostream> using namespace std; //求最大字串和:返回最大和 int maxSubSum(int a[], int len) { int sum = 0; //全局最大值 int temp = 0; //局部最大值 for(int i = 0; i < len; ++i) { if(temp > 0) //如果局部最大值大于0,则继续求和,否则以数组当前元素重新初始化 { temp += a[i]; } else te

【循环数组的最大字串和】Maximal-sum Subsequence

[循环数组的最大字串和]Maximal-sum Subsequence PROBLEM 题目描述 给一个 N×N 的矩阵 M,可以取连续的一段数(必须是横着或者竖着或者斜着,这个矩阵是循环的,具体如下).要求找到一个子序列,使得这个序列的和最大. 对于 N=8 的矩阵,如下序列都是合法的: ? M2,1,M2,2,M2,3,M2,4,M2,5,M2,6,M2,7,M2,8. ? M2,2,M2,3,M2,4. ? M2,6,M2,7,M2,8,M2,1,M2,2. ? M4,3,M5,3,M6,

NYOJ 44 字串和 (最大字串和 线性dp)

题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=44 子串和 时间限制:5000 ms  |  内存限制:65535 KB 难度:3 描述 给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最大,其中,1<=x<=y<=n. 输入 第一行是一个整数N(N<=10)表示测试数据的组数) 每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个

nyoj 104 最大和 (二维最大字串和)

描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵. 例子: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 其最大子矩阵为: 9 2 -4 1 -1 8 其元素总和为15. 输入 第一行输入一个整数n(0<n<=100),表示有n组测试数据: 每组测试数据: 第一行有两个的整数r,c(0<r,c<=100),r.c分别代表矩阵的行和列: 随后有r行,每行有c个整数:

spoj 7258 SUBLEX(求第k大字串

其实对sam的拓扑排序我似懂非懂但是会用一点了. /** @xigua */ #include <stdio.h> #include <cmath> #include <iostream> #include <algorithm> #include <vector> #include <stack> #include <cstring> #include <queue> #include <set>

求最大字串和

算法是前人的智慧,我虽不敏,请事斯诸语. #include <stdio.h> int max_adj(int a[], int len){ int sum=0, max = a[0]; int i=0; for (;i<len;i++){ sum = sum + a[i]; if (sum > max) { max=sum; } if(sum < 0){ sum=0; } } return max; } int main(){ int a[] = {1,2,3,-1,-20