`
niyayu
  • 浏览: 34287 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

最大子段和

 
阅读更多
给出N个数字, 计算出最大的子段和。

Input

第一行给出一个数字 T(1<=T<=20) 代表接下来的组数.
接下来每 T 行,开始给出一个数组 N(1<=N<=100000), 接着跟着N个数字.

数据保证最后结果小于2^31.

Output

输出最大的字段和



Sample Input
2
5 6 -1 5 4 -7
7 0 6 -1 1 -6 7 -5


Sample Output
14
7

#include<iostream>

using namespace std;

#define MAX 10001

void vInput(int nN,int nA[]);
int nGetMax(int nN,int nA[]);
void vOutput(int nOut);

int main()
{
    int nCase;
    int nNum;
    int nAns;
    int i;
    int nArr[MAX];

    scanf("%d",&nCase);
    for(i=1;i<=nCase;i++)
    {
        scanf("%d",&nNum);
        vInput(nNum,nArr);
        nAns=nGetMax(nNum,nArr);
        vOutput(nAns);
    }
    return 0;
}

void vInput(int nN,int nA[])
{
    int i;

    for(i=1;i<=nN;i++)
    {
        scanf("%d",&nA[i]);
    }
}

int nGetMax(int nN,int nA[])
{
    int nMax;
    int nCurrentNum;
    int i;

    nCurrentNum=0;
    nMax=0;
    for(i=1;i<=nN;i++)
    {
        
        if(nCurrentNum>=0)
        {
            nCurrentNum+=nA[i];
        }
        else
        {
            nCurrentNum=nA[i];
        }

        if(nMax<nCurrentNum)
            nMax=nCurrentNum;
    }
    return nMax;
}

void vOutput(int nOut)
{
    printf("%d\n",nOut);
}

分享到:
评论

相关推荐

    python求最大子段和(动态规划法)

    【问题描述】使用分治递归算法解最大子段和问题,具体来说就是,将序列分为长度相等的左右两段,分别求出这两段的最大子段和,包含左右部分子段的最大子段和,求这三种情况得到的最大子段和的最大值。 【输入形式】...

    动态规划策略求解最大子段和问题

    最大子段和问题,可参考《算法设计与分析》讲义中关于用动态规划策略求解最大子段和问题的思想设计动态规划算法。本算法用户需要输入元素个数n,及n个整数。程序应该给出良好的用户界面,输出最大子段相关信息,包括...

    分治法求最大子段和的问题

    1.用分治算法求解最大子段和问题。要求算法的时间复杂度不超过O(nlogn)。 最大子段和问题描述:给定由n个整数(可能为负整数)组成的序列a1, a2,…, an, 求该序列形如的子段和的最大值。当所有整数均为负整数时...

    最大子段和/三种方法/c++

    在编程领域,最大子段和(Maximum Subarray Sum)是一个经典的问题,它的目标是找到一个数组中的连续子数组,使得其元素之和最大。这个问题在实际应用中有着广泛的应用,例如在金融分析、数据挖掘等领域。本文将详细...

    用动态规划法求解最大子段和问题 C语言实现

    最大子段和问题是一个经典的计算机科学问题,主要涉及算法设计和优化。动态规划是一种有效解决这类问题的方法,它通过构建一个最优子结构来避免重复计算,从而提高算法效率。在这个问题中,我们要在一系列整数中找到...

    最大子段和(分治法)源码

    最大子段和(分治法)源码 本资源是一个关于最大子段和问题的解决方案,使用了分治法来解决该问题。最大子段和问题是指给定一个由 n 个整数(可能有负整数)组成的序列(a1, a2, …, an),求该序列中的最大子段和...

    关于动态规划求最大子段和的Java代码写法

    关于动态规划求最大子段和的Java代码写法 本文主要讲述了使用 Java 语言实现动态规划算法来求最大子段和的代码写法。动态规划是一种非常重要的算法设计技术,它可以解决许多复杂的问题。 首先,我们需要了解什么是...

    最大子段和问题 蛮力法 分治法 动态规划法

    最大子段和问题是一个经典的计算机科学中的算法问题,它的目标是找到一个整数数组中连续子数组的最大和。这个问题在很多实际应用中都有所体现,比如在数据分析、股票投资策略等领域。下面我们将深入探讨解决这一问题...

    算法分析与设计.最近对问题.最大子段和(分治法最大子段和(动态规划)

    算法分析与设计最近对问题最大子段和(分治法最大子段和动态规划) 最近对问题最大子段和(分治法)是算法设计与分析中一个重要的知识点,它是指在一组点集中找到最近对点的距离。该问题可以通过分治法和动态规划来...

    算法设计实验报告-求最大子段和问题

    算法设计实验报告,包括:蛮力法、分治法和减治法求最大子段和问题各自的基本思想、时间复杂度分析,C++实现代码,三种算法运行时间的比较,运行截图,实验心得。

    最大子段和-分治法

    ### 最大子段和-分治法 #### 知识点概述 本篇文章将深入探讨“最大子段和”问题的解决方法,重点是利用分治法的思想来解决这一问题。最大子段和问题通常指的是在给定的一个整数数组中,找出一个连续子数组,使得该...

    最大子段和java实现

    最大子段和问题是一个经典的计算机算法问题,它旨在找出一个数组中连续子数组的最大和。在Java中,我们可以使用动态规划或分治法这两种高效的方法来解决这个问题。 首先,我们来了解一下动态规划(Dynamic ...

    算法设计 C 最大子段和 动态规划法和分治法

    本文将深入探讨如何使用C语言实现最大子段和问题,以及如何运用动态规划法和分治法这两种高效策略来解决这一问题。 最大子段和(Maximum Subarray Problem)是计算数组中连续子数组的最大和的经典问题。在实际应用...

    设计算法解决最大子段和或棋盘覆盖问题

    本实验聚焦于“设计算法解决最大子段和或棋盘覆盖问题”,这是一个结合了分治策略和优化技巧的综合性任务。让我们深入探讨这两个主题。 **最大子段和问题** 最大子段和(Maximum Subarray Problem)是一个经典的...

    算法分析实验_最大子段和问题代码

    在这个“算法分析实验_最大子段和问题代码”中,我们关注的是一个经典的算法问题——寻找数组中的最大子段和。这是一个重要的计算机科学问题,它涉及到动态规划和数组处理的基本概念。在这里,开发者使用C#编程语言...

    算法设计 最大子段和

    最大子段和问题是一个经典的计算机科学中的算法问题,它源于数论和动态规划领域。这个问题的基本目标是从一个整数序列中找到一个连续子序列(子数组),使得子序列中的元素相加得到的最大和。这个最大和可以是正数、...

    最大子段和的分治法源程序和PPT

    在计算机科学领域中,最大子段和问题是一个被广泛研究的经典问题,它要求在给定的数组或序列中找到连续子序列的最大和。这个问题不仅在理论上有其重要意义,而且在实际应用中也经常出现,例如在数据分析、图像处理等...

Global site tag (gtag.js) - Google Analytics