nyoj 44-子串和(子串和最大问题)

44-子串和

内存限制:64MB
时间限制:5000ms
Special Judge: No

accepted:12
submit:48

题目描述:

给定一整型数列{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进行输入

分析:

  只有对正数才进行累加,但每一步都要判断该值与原先最大值间的最大值

步骤:

  ①、判断第i-1个数如果大于0,就类加上第i个数(保证第i位通过前驱、或本身能够达到最大值)

  ②、判断原先my_max 与 现在第i位数字的大小,保留大的数在my_max中

核心代码:

1 scanf("%d", &A[0]);
2 for(int i = 1; i < n; ++ i)
3 {
4     if(A[i-1] > 0) A[i] += A[i-1]; // 保证第i位的数最大
5     my_max = max(my_max, A[i]);
6 }

C/C++代码实现(AC):

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <stack>
#include <map>
#include <queue>

using namespace std;
const int MAXN = 1000*1010;
int A[MAXN];

int main()
{
    int t;
    scanf("%d", &t);
    while(t --)
    {
        int n, my_max;
        scanf("%d%d", &n, &A[0]);
        my_max = A[0];
        for(int i = 1; i < n; ++ i)
        {
            scanf("%d", &A[i]);
            if(A[i-1] > 0) // 保证第i位的数最大
                A[i] += A[i-1];
            my_max = max(my_max, A[i]);
        }
        printf("%d\n", my_max);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/GetcharZp/p/9053929.html

时间: 2024-11-05 15:59:04

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) 输出 对于

poj 3261 后缀数组 找重复出现k次的子串(子串可以重叠)

题目:http://poj.org/problem?id=3261 仍然是后缀数组的典型应用----后缀数组+lcp+二分 做的蛮顺的,1A 但是大部分时间是在调试代码,因为模板的全局变量用混了,而自己又忘了,,,等西安邀请赛还有四省赛结束之后,该冷静反思下尝试拜托模板了 错误   :1.k用错,题目的k和模板的k用混; 2.还是二分的C()函数,这个其实跟前一篇<poj 1226 hdu 1238 Substrings 求若干字符串正串及反串的最长公共子串 2002亚洲赛天津预选题>的C函数

删除子串,只要是原串中有相同的子串就删掉所有子串。子串至少两个字符。

//删除子串,只要是原串中有相同的子串就删掉所有子串.子串至少两个字符. #include<stdio.h> #include<string.h> char* delete_string(char s[],char a[]); int main() { char s[255]; char data[255][255];//存放相同的子串 int i,j,k; int length; int row = 0,column;//data[][]的行标和列标 gets(s); lengt

NYOJ 44 子串和 (经典的dp问题)

在<计算机算法设计与分析>看到过其它的解法,不过还是用dp效率最高 时间限制: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),表

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 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) 输出 对于

C - 剪花布条 HDU2087( kmp找子串,子串不能有重叠 )

C - 剪花布条 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多

poj 3261 后缀数组 找反复出现k次的子串(子串能够重叠)

题目:http://poj.org/problem?id=3261 仍然是后缀数组的典型应用----后缀数组+lcp+二分 做的蛮顺的,1A 可是大部分时间是在调试代码.由于模板的全局变量用混了,而自己又忘了.,,等西安邀请赛还有四省赛结束之后,该冷静反思下尝试拜托模板了 错误   :1.k用错,题目的k和模板的k用混; 2.还是二分的C()函数,这个事实上跟前一篇<poj 1226 hdu 1238 Substrings 求若干字符串正串及反串的最长公共子串 2002亚洲赛天津预选题>的C函

《算法竞赛入门经典》3.3最长回文子串

1 //例题3-4 2 /* 3 * 输入一个字符串,求出其中最长的回文子串.子串的含义是:在原串中连续出现的字符串片段. 4 *回文的含义是:正看着和倒看着相同,如abba和yyxyy.在判断时,应该忽略所有标点符号和空格 5 *且忽略大小写,但输出应保持原样(在回文串的首部和尾部不要输出多余字符).输入字符长度不超过5000 6 *且占据单独的一行.应该输出最长回文串,如果有多个,输出起始位置最靠左的. 7 *样例输入:Confuciuss say:Madam,I'm Adam. 8 *样例

求最大子串和 最长子串的java写法

同事去面试问到求最大和的子串,举例来说给你一个有正有负的数组, 1 -1 2 -4 5 6 -3,它的最大和就是 5 6 所组成的子串和11.根据其隔离性,即任何子串内部都不会有这样一个结构 2 -4,因为如果包含这个子串,必定不是最大子串(2-4<0),因此可以根据此性质,将数组进行分割,而分割的标志就是小于0的结构. 1 public static void main(String[] args) { 2 3 int[] array = {1,2,-4,3,5,-4,7,8,2,-1,6,-