poj 2479 Maximum sum
2015-06-02 11:32
225 查看
Maximum sum
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
Sample Output
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
最大子段和的变形,我的思路是从两个方向求该数列的最大字段和,然而我的dp方程f[i]=max(f[i-1]+f[i],f[i])保存的是以f[i]结束的最大子段和的值,一开始居然用了两重循环去找最大值。。。。果断TL了。。。。看了大神们的代码,发现大神们的f[i]保存的都是到f[i]为止之前所有的最大子段和里的最大值,无奈又处理了一下数组,终于过了。。。
代码:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 35588 | Accepted: 11048 |
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
最大子段和的变形,我的思路是从两个方向求该数列的最大字段和,然而我的dp方程f[i]=max(f[i-1]+f[i],f[i])保存的是以f[i]结束的最大子段和的值,一开始居然用了两重循环去找最大值。。。。果断TL了。。。。看了大神们的代码,发现大神们的f[i]保存的都是到f[i]为止之前所有的最大子段和里的最大值,无奈又处理了一下数组,终于过了。。。
代码:
#include <cstdio> #include <iostream> using namespace std; int a[1000000],f1[1000000],f2[1000000]; int main() { int t,n,Max; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); f1[i]=f2[i]=a[i]; } Max=-1000000; for(int i=2;i<=n;i++) { f1[i]=max(f1[i],f1[i-1]+f1[i]); f2[n-i+1]=max(f2[n-i+1],f2[n-i+1]+f2[n-i+2]); } for(int i=2;i<=n;i++) f1[i]=max(f1[i],f1[i-1]); for(int i=n-1;i>=1;i--) f2[i]=max(f2[i],f2[i+1]); for(int i=2;i<=n;i++) Max=max(Max,f1[i-1]+f2[i]); printf("%d\n",Max); } return 0; }
相关文章推荐
- 41、应用如何签名以及签名的意义(转载)
- TP excel 导入类
- 黑马程序员——java基础——异常笔记
- 手机APP UI设计尺寸基础知识
- 从估值20亿元的in,来谈下图片社交的玩法
- 深入理解Java虚拟机到底是什么
- Java并发概念汇总
- weka数据准备
- android - lint 常见错误
- shell 脚本变量赋值
- django用户验证模块核心
- 字符串与数组
- camera-arm-RPI
- 网络绘制插件
- II7下配置SSAS通过HTTP 远程链接访问
- 音频均衡器Equalizer算法研究与实现
- [leetcode] Factorial Trailing Zeroes
- eclipse 测试常用插件,附地址,持续更新
- SAP库存管理之ABC分类法
- 缓存穿透与缓存雪崩