HDOJ-1003: Maximum Continuous Sum

Time:2019-10-9

The title of HDOJ-1003 is as follows
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

Given an array, find a continuous subarray in it, make it and the maximum, and output the maximum, as well as the left and right index numbers of the interval. (This output format is really annoying)
The general idea is to add up, if the current value is greater than the maximum set, then exchange. And record the left and right indexes at this time, otherwise continue to accumulate. If this time is less than 0, then discard it directly.

#include <iostream>
#include <algorithm>
using namespace std;
int a[100001];
int main(){
    int number;
    cin >> number;

    for(int i = 1; i <= number; i++){
        int max = INT_MIN;
        int t,left, right;
        cin >> t;
        left = right = 1;
        int m = 1;
        int sum = 0;
        for(int j = 1; j <= t; j++){
            cin >> a[i];
            sum += a[i];
            if(sum > max){
                max = sum;
                right = j;
                left = m;
            }
            if(sum < 0){
                sum = 0;
                m = j + 1;
            }
        }
        cout << "Case " << i << ":" << endl;
        cout << max << " "<< left << " " << right << endl;
        if( i < number )
            cout << endl;
    }
    system("pause");
    return 0;
}

Recommended Today

Install and configure Redis under Ubuntu16.04

Statement: the content of this article is reproduced to [Ubuntu16.04 installation and configuration of Redis] I. preconditions You need to connect to the Internet and then execute the sudo apt-get update package Execute the installation command sudo apt-get install redis-server After execution, as shown below, we enter y to confirm the installation and use the […]