zoukankan      html  css  js  c++  java
  • 动态规划(DP),递推,最大子段和,POJ(2479,2593)

    题目链接:http://poj.org/problem?id=2479

    解题报告:

    1、再求left[i]的时候,先没有考虑a[i]的正负,先把a[i]放到left[i]中,然后left=max(left[i-1],left[i]);

    2、res=max(res,left[i-1]+right[i]);

    #include <stdio.h>
    #include <algorithm>
    
    using namespace std;
    
    #define MAX 50005
    
    int a[MAX];
    int left[MAX];
    int right[MAX];
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n;
            scanf("%d",&n);
            for(int i=0;i<n;i++)
                scanf("%d",&a[i]);
            ///此时left[i]为包含a[i]最大子段和
            left[0]=a[0];
            for(int i=1;i<n;i++)
            {
                if(left[i-1]<0)
                    left[i]=a[i];
                else
                    left[i]=left[i-1]+a[i];
            }
            ///此时left[i]为i左边最大子段和
            for(int i=1;i<n;i++)
                left[i]=max(left[i],left[i-1]);
            right[n-1]=a[n-1];
            for(int j=n-2;j>=0;j--)
            {
                if(right[j+1]<0)
                    right[j]=a[j];
                else right[j]=right[j+1]+a[j];
            }
            for(int j=n-2;j>=0;j--)
                right[j]=max(right[j],right[j+1]);
            int res=-100000000;
            for(int i=1;i<n;++i)
                res=max(res,left[i-1]+right[i]);
            printf("%d
    ",res);
        }
        return 0;
    }
  • 相关阅读:
    2.4学习
    2.3学习
    2.2学习
    2.1学习
    公文流转系统 模拟
    《GCC编译器的使用以及静态库和动态库的制作与使用》
    《驱动调试
    《海思3521D
    《驱动调试
    《驱动调试
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5227078.html
Copyright © 2011-2022 走看看