zoukankan      html  css  js  c++  java
  • hdu---1003---Max Sum

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

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 216737    Accepted Submission(s): 51087

    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
     
    Author
    Ignatius.L
     
    Recommend
    We have carefully selected several similar problems for you:  1176 1087 1069 2084 1058 
     
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <cmath>
    #include<vector>
    #include<algorithm>
    using namespace std;
    #define PI 3.1415926
    
    const int maxn=1000007;
    const int INF=0x3f3f3f3f;
    
    int a[maxn];
    int main()
    {
        int T, cas=1, f=0;
        scanf("%d", &T);
        while(T--)
        {
             if(f)
                puts("");///printf("
    ");
            int n;
            scanf("%d", &n);
            for(int i=1; i<=n; i++)
                scanf("%d", &a[i]);
    
            int nows=1, Start=1, End=1;
            int sum, Max;
            sum=Max=a[1];
    
            for(int i=2; i<=n; i++)
            {
                if(sum+a[i]<a[i])
                {
                    sum=a[i];
                    nows=i;
                }
                else
                    sum+=a[i];
    
                if(sum>Max)
                {
                    Max=sum;
                    Start=nows;
                    End=i;
                }
            }
            printf("Case %d:
    %d %d %d
    ", cas++, Max, Start, End);
            f=1;
        }
        return 0;
    }
  • 相关阅读:
    leetcode 190 Reverse Bits
    vs2010 单文档MFC 通过加载位图文件作为客户区背景
    leetcode 198 House Robber
    记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence
    逆序数2 HDOJ 1394 Minimum Inversion Number
    矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
    递推DP URAL 1586 Threeprime Numbers
    递推DP URAL 1167 Bicolored Horses
    递推DP URAL 1017 Staircases
    01背包 URAL 1073 Square Country
  • 原文地址:https://www.cnblogs.com/w-y-1/p/5748644.html
Copyright © 2011-2022 走看看