Max Sequence
Time Limit: 3000MS   Memory Limit: 65536K
Total Submissions: 16329   Accepted: 6848

Description

Give you N integers a1, a2 ... aN (|ai| <=1000, 1 <= i <= N).

You should output S. 

Input

The input will consist of several test cases. For each test case, one integer N (2 <= N <= 100000) is given in the first line. Second line contains N integers. The input is terminated by a single line with N = 0.

Output

For each test of the input, print a line containing S.

Sample Input

5
-5 9 -5 11 20
0

Sample Output

40

题意是给出一个序列,求这个序列中两个子序列的和的最大值。
两三年前切了POJ2479,但当时还很不理解dp (当然现在对dp的理解程度也就能切切dp水题。。。)。所以做这道题的时候无限感慨。
其实求一个序列的和的最大值很简单,即dp[i]=max(dp[i-1]+value[i], value[i])
现在它要求两个序列的和的最大值。所以想到从左边来一次,从右边来一次。
left[i]表示从第1个数字到当前第i个数字为止,左边的最大序列和。
right[i]表示从第Test个数字(从右向左)到第i个数字为止,右边的最大序列和。

代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std; int left_v[100005];
int right_v[100005];
int value[100005]; int main()
{
int Test;
while(cin>>Test)
{
if(!Test)
break; left_v[0]=0;
right_v[0]=0;
left_v[Test+1]=0;
right_v[Test+1]=0; int i,max_v=-100000000;
for(i=1;i<=Test;i++)
{
cin>>value[i];
}
left_v[1]=value[1];
right_v[Test]=value[Test]; for(i=2;i<=Test;i++)
{
left_v[i]=max(left_v[i-1]+value[i],value[i]);
}
for(i=Test-1;i>=1;i--)
{
right_v[i]=max(right_v[i+1]+value[i],value[i]);
}
for(i=2;i<=Test;i++)
{
left_v[i]=max(left_v[i-1],left_v[i]);
}
for(i=Test-1;i>=1;i--)
{
right_v[i]=max(right_v[i+1],right_v[i]);
}
for(i=1;i<Test;i++)
{
if(left_v[i]+right_v[i+1]>max_v)
max_v=left_v[i]+right_v[i+1];
}
cout<<max_v<<endl;
}
return 0;
}

自己把这道题A掉,相当开心。2015/7/5。



版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ 2593&&2479:Max Sequence的更多相关文章

  1. POJ 2479 Maximum sum POJ 2593 Max Sequence

    d(A) = max{sum(a[s1]..a[t1]) + sum(a[s2]..a[t2]) | 1<=s1<=t1<s2<=t2<=n} 即求两个子序列和的和的最大 ...

  2. POJ 2593 Max Sequence

    Max Sequence Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17678   Accepted: 7401 Des ...

  3. (线性dp,最大连续和)Max Sequence

    Max Sequence Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 18511   Accepted: 7743 Des ...

  4. Matlab:max函数

    Matlab中max函数在矩阵中求函数大小的实例如下: C = max(A)返回一个数组各不同维中的最大元素.如果A是一个向量,max(A)返回A中的最大元素.如果A是一个矩阵,max(A)将A的每一 ...

  5. poj 2593&&poj2479(最大两子段和)

    Max Sequence Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 16850   Accepted: 7054 Des ...

  6. HDU1244:Max Sum Plus Plus Plus

    题目链接:Max Sum Plus Plus Plus 题意:在n个数中取m段数使得这m段数之和最大,段与段之间不能重叠 分析:见代码 //dp[i][j]表示前i个数取了j段的最大值 //状态转移: ...

  7. 【九度OJ】题目1442:A sequence of numbers 解题报告

    [九度OJ]题目1442:A sequence of numbers 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1442 ...

  8. poj 2593 Max Sequence(线性dp)

    题目链接:http://poj.org/problem?id=2593 思路分析:该问题为求给定由N个整数组成的序列,要求确定序列A的2个不相交子段,使这m个子段的最大连续子段和的和最大. 该问题与p ...

  9. POJ 1019:Number Sequence 二分查找

    Number Sequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36013   Accepted: 10409 ...

随机推荐

  1. Django 连接 Mysql (8.0.16) 失败

    首先,确认数据库配置正确无误: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # or use: mysql.con ...

  2. RCast 66: 射影几何与Rho演算

    Greg Meredith与Isaac DeFrain和Christian Williams一起讨论了射影几何及其在Rho演算中的作用. 原文链接及音频 https://blog.rchain.coo ...

  3. Python 100 Days

    Day 1 python的缺点 执行效率稍低,因此计算密集型任务可以由C/C++编写. 在开发时可以选择的框架太多(如Web框架就有100多个),有选择的地方就有错误. python解释器 官方的Py ...

  4. 089、Java中String类之利用构造方法实例化

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  5. ROS-3 : Catkin工作空间和ROS功能包

    一.创建一个Catkin工作空间 步骤一:构建catkin工作空间 安装完成ROS版本后,设置好环境变量:$ source /opt/ros/kinetic/setup.bash.然后即可创建一个ca ...

  6. 整合Spring时Service层为什么不做全局包扫描详解

    合Spring时Service层为什么不做全局包扫描详解 一.Spring和SpringMVC的父子容器关系 1.讲问题之前要先明白一个关系 一般来说,我们在整合Spring和SpringMVC这两个 ...

  7. 前端学习(20)~css布局(十三)

    常见的布局属性 (1)display 确定元素的显示类型: block:块级元素. inline:行内元素. inline-block:对外的表现是行内元素(不会独占一行),对内的表现是块级元素(可以 ...

  8. 机器学习(ML)八之正向传播、反向传播和计算图,及数值稳定性和模型初始化

    正向传播 正向传播的计算图 通常绘制计算图来可视化运算符和变量在计算中的依赖关系.下图绘制了本节中样例模型正向传播的计算图,其中左下角是输入,右上角是输出.可以看到,图中箭头方向大多是向右和向上,其中 ...

  9. Python在运行中发生错误怎么正确处理方法,案例详解!

    在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返回文件描 ...

  10. NirSoft 实用程序

    64-bit (x64) utilities package 此软件包包含NirSoft中的所有实用程序,这些实用程序具有64位版本(x64)Windows的独立构建. 此程序包包含下面列表中每个实用 ...