• POJ 2479 Maximum sum (双向DP)


    Maximum sum
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 28485   Accepted: 8713

    Description

    Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below:
    Your task is to calculate d(A).

    Input

    The input consists of T(<=30) test cases. The number of test cases (T) is given in the first line of the input. Each test case contains two lines. The first line is an integer n(2<=n<=50000). The second line contains n integers: a1, a2, ..., an. (|ai| <= 10000).There is an empty line after each case.

    Output

    Print exactly one line for each test case. The line should contain the integer d(A).

    Sample Input

    1
    
    10
    1 -1 2 2 3 -3 4 -4 5 -5

    Sample Output

    13

    Hint

    In the sample, we choose {2,2,3,-3,4} and {5}, then we can get the answer.
    Huge input,scanf is recommended.

    Source

    POJ Contest,Author:Mathematica@ZSU
     
     
    双向DP求解:
     
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    using namespace std;
    
    const int N=50010;
    
    int n,num[N];
    int dpl[N],dpr[N];
    
    int main(){
    
        //freopen("input.txt","r",stdin);
    
        int t;
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            scanf("%d",&num[0]);
            dpl[0]=num[0];
            for(int i=1;i<n;i++){
                scanf("%d",&num[i]);
                if(dpl[i-1]>=0) //从左向右求最大值
                    dpl[i]=dpl[i-1]+num[i];
                else
                    dpl[i]=num[i];
            }
            int maxv=num[n-1],ans=-999999;
            dpr[n-1]=num[n-1];
            for(int i=n-1;i>=1;i--){
                if(dpr[i]>=0)    //从右向左求最大值
                    dpr[i-1]=dpr[i]+num[i-1];
                else
                    dpr[i-1]=num[i-1];
                if(maxv<dpr[i])
                    maxv=dpr[i];
                if(ans<maxv+dpl[i-1])
                    ans=maxv+dpl[i-1];
            }
            printf("%d\n",ans);
        }
        return 0;
    }
  • 相关阅读:
    如何在Altium中下载并添加软件没有的苦文件【转】
    20121124
    变量作用域&函数作用域
    http相关知识
    函数声明和函数表达式
    js中constructor和prototype
    委托模式
    js跨域
    原型和原型链
    javascript 数据类型
  • 原文地址:https://www.cnblogs.com/jackge/p/2852306.html
Copyright © 2020-2023  润新知