hdu 1003 - Max Sum

題目:Max Sum


題意:求子串的最大和和此子串的始末位置


代碼:

#pragma comment(linker, "/STACK:102400000,102400000")
#include "iostream"
#include "cstring"
#include "algorithm"
#include "cmath"
#include "cstdio"
#include "sstream"
#include "queue"
#include "vector"
#include "string"
#include "stack"
#include "cstdlib"
#include "deque"
#include "fstream"
#include "map"
using namespace std;
typedef long long LL;
const int INF = 0x1fffffff;
const int MAXN = 1000000+100;
#define eps 1e-14

int main()
{
    int t;
    cin >> t;

    for(int kase = 1 ; kase <= t ; kase++)
    {
        int n;
        cin >> n;
        int num;
        int sum=0,maxn = -INF,s=1,e=1,tmps=1;

        for(int i = 1 ; i <= n ; i++)
        {
            cin >> num;

            sum += num;
            
            //這樣的安排可以處理全爲負數的情況

            if(sum > maxn)  //新的最大值,更新所有信息
            {
                maxn = sum;
                s = tmps;
                e = i;
            }

            if(sum < 0)     //小於0了sum歸零,但不着急改s
            {
                sum = 0;
                tmps = i+1;
            }



        }

        cout << "Case " << kase << ":" << endl;
        cout << maxn << ' ' << s  << ' ' << e << endl;
        if(t != kase)
            cout << endl;
    }

    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章