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

  1. 5
  2. -5 9 -5 11 20
  3. 0

Sample Output

  1. 40

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

代码:
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. int left_v[100005];
  7. int right_v[100005];
  8. int value[100005];
  9.  
  10. int main()
  11. {
  12. int Test;
  13. while(cin>>Test)
  14. {
  15. if(!Test)
  16. break;
  17.  
  18. left_v[0]=0;
  19. right_v[0]=0;
  20. left_v[Test+1]=0;
  21. right_v[Test+1]=0;
  22.  
  23. int i,max_v=-100000000;
  24. for(i=1;i<=Test;i++)
  25. {
  26. cin>>value[i];
  27. }
  28. left_v[1]=value[1];
  29. right_v[Test]=value[Test];
  30.  
  31. for(i=2;i<=Test;i++)
  32. {
  33. left_v[i]=max(left_v[i-1]+value[i],value[i]);
  34. }
  35. for(i=Test-1;i>=1;i--)
  36. {
  37. right_v[i]=max(right_v[i+1]+value[i],value[i]);
  38. }
  39. for(i=2;i<=Test;i++)
  40. {
  41. left_v[i]=max(left_v[i-1],left_v[i]);
  42. }
  43. for(i=Test-1;i>=1;i--)
  44. {
  45. right_v[i]=max(right_v[i+1],right_v[i]);
  46. }
  47. for(i=1;i<Test;i++)
  48. {
  49. if(left_v[i]+right_v[i+1]>max_v)
  50. max_v=left_v[i]+right_v[i+1];
  51. }
  52. cout<<max_v<<endl;
  53. }
  54. return 0;
  55. }

自己把这道题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. element ui表格表头顺序错乱的问题

    因为在项目中两个表格共用了同一个组件, 但由于表头不完全相同, 就通过v-if来控制表头的显示隐藏,没想到造成了表头顺序的错乱, 经过多方查找资料,最后找到了解决方法: 即为每一列el-table-c ...

  2. tensorflow之逻辑回归模型实现

    前面一篇介绍了用tensorflow实现线性回归模型预测sklearn内置的波士顿房价,现在这一篇就记一下用逻辑回归分类sklearn提供的乳腺癌数据集,该数据集有569个样本,每个样本有30维,为二 ...

  3. ch4 圆角框

    固定宽度的圆角框 只需要两个图像:一个应用于框的顶部,一个应用于底部 <div class="box"> <h2>Lorem Ipsum</h2> ...

  4. php 实现店铺装修5

    /** * @title 选中蜂店装修模板样式 * @param plate_id 是 int 商品(平台或特色)装修样式ID * @param type_id 是 int 要装修商品的类型(1-平台 ...

  5. ROS-4 : ROS节点和主题

    依照<ROS-3 : Catkin工作空间和ROS功能包>,创建catkin工作空间,并在起src下创建功能包ros_demo_pkg,依赖项为roscpp.std_msgs.action ...

  6. JuJu团队12月28号工作汇报

    JuJu团队12月28号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 飞飞 完成GUI 待安排 无 婷婷 调试代码 提升acc 无 恩升 修正evaluate 修正evalu ...

  7. python2学习------基础语法2(函数)

    1.函数 # 无参数函数 def loopTest2(): a=1; while a<40: print a; a=a+1; if a==35: continue; else: print 'o ...

  8. 小程序列表循环出来的list是不同接口赋的值

    需求:首页有三个列表,样式形式都是一样的,可以循环展示,但是循环的内容list部分是来自于不同的三个接口. data: { indexList:[{ name: "中考体能突击营" ...

  9. LoNg wAy tO Go

    觉得一个电子工程师/硬件工程师应该有下面的能力: 1.模拟/数字电路的分析和设计.教科书上讲的都应该会,包括分离元件和运放的信号放大,滤波,波形产生,稳压电源,逻辑化简,基本触发器,基本计数器.寄存器 ...

  10. 【转】Spark Streaming 实时计算在甜橙金融监控系统中的应用及优化

    系统架构介绍 整个实时监控系统的架构是先由 Flume 收集服务器产生的日志 Log 和前端埋点数据, 然后实时把这些信息发送到 Kafka 分布式发布订阅消息系统,接着由 Spark Streami ...