POJ 2479 DP

//
//  main.cpp
//  POJ 2479 DP
//
//  Created by 鄭喆君 on 8/11/14.
//  Copyright (c) 2014 itcast. All rights reserved.
//

#include<cstdio>
#include<cstring>
#include<iostream>
#include<iomanip>
#include<queue>
#include<cmath>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
typedef long long LL;
const int int_max = 0x07777777;
const int int_min = 0x80000000;
int n,a[51000],d[51000],p[51000],dp[51000][2];
int bigger (int a, int b){
    return a > b ? a : b;
}
int main(int argc, const char * argv[])
{
    int t;
    scanf("%d", &t);
    while (t--) {
        scanf("%d", &n);
        for(int i = 0; i < n; i++) scanf("%d", a+i);
        d[0] = a[0];
        p[0] = a[0];
        for(int i = 1; i < n; i++){
            d[i] = (a[i] > d[i-1]+a[i] ? a[i] : d[i-1]+a[i]);
            p[i] = (d[i] > p[i-1] ? d[i] : p[i-1]);
        }
        d[1] = a[0]+a[1];
        int result = d[1];
        for(int i = 2; i < n; i++){
            d[i] = bigger(d[i-1], p[i-1])+a[i];
            result = (result < d[i] ? d[i] : result);
        }
        cout << result << endl;
    }
}


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