Maximum sum
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 39599   Accepted: 12370

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

题意:求两段和最大

一开始自己想
d[i][0]前i个以i结尾选了一段
d[i][1]前i个以i结尾选了两段
然后扫描维护一个d[i][0]的最大值mx,转移

d[i][0]=max(0,d[i-1][0])+a[i];

d[i][1]=max(d[i-1][1],mx)+a[i];

初始化注意一下就行了

还有一种做法:

双向求最大字段和,最后枚举第一段的结束位置求

//两个dp函数,两种方法
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=5e4+,INF=1e9;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int T,n,a[N];
int d[N][],ans;
void dp(){
ans=-INF;int mx=a[];
d[][]=a[];d[][]=-INF;
for(int i=;i<=n;i++){
d[i][]=max(,d[i-][])+a[i];
d[i][]=max(d[i-][],mx)+a[i];
mx=max(mx,d[i][]);
ans=max(ans,d[i][]);
}
}
void dp2(){
ans=-INF;
for(int i=;i<=n;i++) d[i][]=max(,d[i-][])+a[i];
d[n+][]=;
for(int i=n;i>=;i--) d[i][]=max(,d[i+][])+a[i];
int mx=d[][];
for(int i=;i<=n;i++){
ans=max(ans,mx+d[i][]);
mx=max(mx,d[i][]);
}
}
int main(int argc, const char * argv[]) {
T=read();
while(T--){
n=read();
for(int i=;i<=n;i++) a[i]=read();
dp();
printf("%d\n",ans);
} return ;
}

最新文章

  1. XMLHttpRequest简介
  2. iOS 中的 NSTimer
  3. Tomcat中的webapps中的web应用的文件结构
  4. 利用API自动建立GL科目段组合
  5. Completely change MACE timestamps?
  6. Apache HTTP Server安装教程
  7. python获取设备主机名和IP地址
  8. Error creating bean with name
  9. 学号 20175201张驰 《Java程序设计》第6周学习总结
  10. HDU - 6054String and String
  11. CentOS 7 下使用yum安装MySQL5.7.20 最简单图文详解
  12. 【angularJs】阻止默认事件
  13. IDEA使用笔记(十一)——好玩的类图结构
  14. FPGA型号解读
  15. 安全运维之:网络实时流量监测工具iftop
  16. 第三百八十二节,Django+Xadmin打造上线标准的在线教育平台—xadmin管理员详情页面布局,导航图标设置
  17. Android 将APK文件安装到AVD中并分析其界面结构
  18. 什么是web service (转)
  19. Python Map 并行
  20. linux命令(22):mkdir命令

热门文章

  1. MVC 自定义Htmlhelper扩展
  2. 转载:《TypeScript 中文入门教程》 2、枚举
  3. JAVA 异常处理机制
  4. 大公司c#&amp;.net转型java的原因有哪些?
  5. 对于SSH框架的选择
  6. 公司内部的一篇关于dom方法的分享
  7. iOS开发中的http浅析
  8. GCD定时器
  9. 【原】设置iOS项目BuildVersion自动增加
  10. .Net中使用SendGrid Web Api发送邮件(附源码)