zoukankan      html  css  js  c++  java
  • poj 2593 Max Sequence(线性dp)

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

    思路分析:该问题为求给定由N个整数组成的序列,要求确定序列A的2个不相交子段,使这m个子段的最大连续子段和的和最大。

    该问题与poj 2479相同,解法也一样;

     

    代码如下:

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    const int MAX_N = 100000 + 10;
    int arr[MAX_N], dp_s[MAX_N], dp_r[MAX_N];
    int arr_num;
    
    int main(int argc, char *argv[])
    {
        int temp_ans, sum, ans;
        
        while (scanf("%d", &arr_num) != EOF && arr_num != 0)
        {
            for (int i = 0; i < arr_num; ++i)
                scanf("%d", &arr[i]);
    
            temp_ans = INT_MIN, sum = 0;
            for (int i = 0; i < arr_num; ++i)
            {
                if (sum >= 0)
                    sum += arr[i];
                else
                    sum = arr[i];
                if (sum > temp_ans)
                    temp_ans = sum;
                dp_s[i] = temp_ans;
            }
    
            temp_ans = INT_MIN, sum = 0;
            for (int i = arr_num - 1; i >= 0; --i)
            {
                if (sum >= 0)
                    sum += arr[i];
                else
                    sum = arr[i];
                if (sum > temp_ans)
                    temp_ans = sum;
                dp_r[i] = temp_ans;
            }
    
            ans = dp_s[0] + dp_r[1];
            for (int i = 1; i < arr_num - 1; ++i)
            {
                int sum = dp_s[i] + dp_r[i + 1];
                if (sum > ans)
                    ans = sum;
            }
            printf("%d
    ", ans);
        }
    
        return 0;
    }
  • 相关阅读:
    flask_日期和时间
    使用SQLAlchemy对博客文章进行分页
    P2725 邮票 Stamps
    P2679 子串
    P3396 哈希冲突
    P1754 球迷购票问题
    P1504 积木城堡
    P1244 青蛙过河
    CSP-S 2019 考试分析
    2019.11.11 模拟赛 T2 乘积求和
  • 原文地址:https://www.cnblogs.com/tallisHe/p/4523545.html
Copyright © 2011-2022 走看看