杭电 1003 Max Sum

http://acm.hdu.edu.cn/showproblem.php?pid=1003

Max Sum

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 142781    Accepted Submission(s): 33242

Problem Description

Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.

Input

The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line starts with a number N(1<=N<=100000), then N integers followed(all the integers
are between -1000 and 1000).

Output

For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line contains three integers, the Max Sum in the sequence, the start position
of the sub-sequence, the end position of the sub-sequence. If there are more than one result, output the first one. Output a blank line between two cases.

Sample Input

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

Sample Output

Case 1:
14 1 4

Case 2:
7 1 6

题目要求我们找一个连续子序列的和最大,并且记录这个序列第一个元素和最后一个元素在原序列中的位置。

AC代码:

<span style="font-size:24px;">#include<iostream>
using namespace std;
int main()
{
    int i,j,k=0,t,n,a,start,end,max,temp;
    cin>>t;
    for(i=1;i<=t;i++)
    {
        max=-1001,temp=start=k=0;
        scanf("%d",&n);
        for(j=0;j<n;j++)
        {
            scanf("%d",&a);
            temp+=a;
            if(temp>max)
            {
                start=k;
                end=j;
                max=temp;
            }
            if(temp<0)//再往后加会“拖累”后面的和。
            {
                temp=0;
                k=j+1;
            }
        }
        printf("Case %d:\n",i);
        printf("%d %d %d\n",max,start+1,end+1);
        if(i!=t)
            cout<<endl;
    }
    return 0;
}</span>

杭电 1003 Max Sum,布布扣,bubuko.com

时间: 2024-10-24 19:12:59

杭电 1003 Max Sum的相关文章

杭电1003 Max Sum 【连续子序列求最大和】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目意思: 即给出一串数据,求连续的子序列的最大和 解题思路: 因为我们很容易想到用一个max来存放找到的子序列的和中的最大值,通过不断比较,对max的值进行更新,最后我们就能够得到最大子序列的和,于是很容易想到用暴力搜索,见上一篇博客,这样的时间复杂度为O(n^3),是超时的. 又因为想到只要一个数不是负数,不管它再小,加上去也是会使和变大的,所以我们需要用另一个变量来判断即将要加上的一个

杭电1003 Max Sum TLE

这一题目是要求连续子序列的最大和,所以在看到题目的一瞬间就想到的是把所有情况列举出来,再两个两个的比较,取最大的(即为更新最大值的意思),这样的思路很简单,但是会超时,时间复杂度为O(n^3),因为有三重for语句 #include<stdio.h> #define maxn 101000 int main() { int ncase,flag=1,n,max,sum=0,h,z,a[maxn]; long i,j,k; scanf("%d",&ncase); wh

杭电ACM3415——Max Sum of Max-K-sub-sequence

一开始,看到这题,以为是最大连续子序列和的问题,写出了代码,提交了,WR,找了一些测试数据,结果发现这个算法并不能将所以的序列的解求出,只是满足一部分序列. 百度了一下,知道了要用单调队列来求解. 单调队列,也就是队列中必然是单调递减的或者递增的.而这题使用的是单调递增的队列. 单调队列使用的是双向队列,队尾队头都可以删除元素,只能从队尾插入元素. 比如求解一个数列{1  ,2  ,5 ,3, 4, 6}的最长的递增序列的长度. 首先,1入队,队列中有 1. 接下来2比1 大,2入队,队列为 1

杭电1003(Max Sum) 首次dp

点击打开杭电1003 Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14. Input The first line of the inp

杭电 1003

Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 142647    Accepted Submission(s): 33192 Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max s

hdoj 1003 Max Sum 【最大子段和】【贪心】

题意:... 策略:看着像贪心,感觉也是贪心. 很久之前做的,又做了一遍,好题. 代码: #include<stdio.h> #include<string.h> int s[100005]; int main() { int t, i, j, l, st, en, n, v = 1; scanf("%d", &t); while(t --){ scanf("%d", &n); for(i = 1; i <= n; i

HDOJ 1003 Max Sum【MSS】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 158875    Accepted Submission(s): 37166 Problem Description Given a sequence a[1],a[2

最大子序列和 HDOJ 1003 Max Sum

题目传送门 1 /* 2 题意:求最大连续子序列和及两个端点 3 累积遍历算法 O(n):依照sum<0将序列分块,最值在某一块上产生.dp也是同样的思路:dp[i] = max (dp[i-1] + a[i], a[i]) 其实是一样的 4 1003就这么难?? 5 详细解释 6 */ 7 /************************************************ 8 * Author :Running_Time 9 * Created Time :2015-8-10

HDU 1003 Max Sum 最大连续子序列的和

Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14. Input The first line of the input contains