poj 2479 2593 最大字段和
2016-02-01 00:10
302 查看
poj2479
Maximum sum
Description
Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below:
![](http://poj.org/formula?tex=d%28A%29%3D%5Cmax_%7B1%5Cleq+s_1%5Cleq+t_1%3Cs_2%5Cleq+t_2%5Cleq+n%7D%5Cleft%5C%7B%5Csum_%7Bi%3Ds_1%7D%5E%7Bt_1%7Da_i%2B%5Csum_%7Bj%3Ds_2%7D%5E%7Bt_2%7Da_j%5Cright%5C%7D&driver=1)
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.
需要注意这个算法的是:
对于求最大字段和的时候:若是a[ i ]<0 也是灭有关系的,因为要是前面的和也是小于0 的,那么下一个也是小于0 的
要是前面字段和不是小于0 ,那么字段和就会有下降,所以后面的一个循环可以取最大的值,直接就掩盖了小于0 的缺陷
poj2593
Description
Give you N integers a1, a2 ... aN (|ai| <=1000, 1 <= i <= N).
![](http://poj.org/images/2593_1.jpg)
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
Sample Output
Maximum sum
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 37842 | Accepted: 11827 |
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.
需要注意这个算法的是:
对于求最大字段和的时候:若是a[ i ]<0 也是灭有关系的,因为要是前面的和也是小于0 的,那么下一个也是小于0 的
要是前面字段和不是小于0 ,那么字段和就会有下降,所以后面的一个循环可以取最大的值,直接就掩盖了小于0 的缺陷
#include<stdio.h> #include<algorithm> using namespace std; int a[50001]; int left[50001]; int right[50001]; int main() { int T; scanf("%d",&T); while(T--) { //-----------------初始化输入------------------// int n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); //---------------左字段最大--------------------// left[0]=a[0]; for(int i=1;i<n;i++) if(left[i-1]<0) left[i]=a[i]; else left[i]=a[i]+left[i-1]; for(int i=1;i<n;i++) left[i]=max(left[i],left[i-1]); //---------------右字段最大--------------------// right[n-1]=a[n-1]; for(int j=n-2;j>=0;j--) if(right[j+1]<0) right[j]=a[j]; else right[j]=a[j]+right[j+1]; for(int j=n-2;j>=0;j--) right[j]=max(right[j],right[j+1]); //---------------得出所需要的答案--------------------// int ans=-0xfffffff; for(int i=1;i<n;i++) ans=max(ans,right[i]+left[i-1]); printf("%d\n",ans); } return 0; }
poj2593
Description
Give you N integers a1, a2 ... aN (|ai| <=1000, 1 <= i <= N).
![](http://poj.org/images/2593_1.jpg)
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
#include<stdio.h> #include<algorithm> using namespace std; const int MAX=100005; int a[MAX]; int b[MAX]; int main() { int n; while(scanf("%d",&n),n) { for(int i=0;i<n;i++) scanf("%d",&a[i]); int temp=0; int ans=-0xfffffff; for(int i=0;i<n;i++){ temp+=a[i]; if(temp>ans) ans=temp; if(temp<0) temp=0; b[i]=ans; } ans=-0xfffffff; temp=0; int bug=-0xfffffff; for(int i=n-1;i>0;i--){ temp+=a[i]; if(temp>ans) ans=temp; if(temp<0) temp=0; bug=max(bug,ans+b[i-1]); } printf("%d\n",bug); } return 0; }
相关文章推荐
- .net 常用技术汇总
- 后悔了可以找我我们是朋友
- typeof操作符的返回值
- Building and running Node.js for Android
- Android - OpenSSL
- RHEL 7.0已发布CentOS 7即将到来
- 编译node-v4.2.1,出现错误:undefined reference to getpwuid_r
- 安装使用quagga
- Nvidia回应Linux之父的指责 坚持不做任何让步
- Linux内核设计的艺术(第2版)
- 环境配置文件 ① /etc/profile、② ~/.bash_profile、③ ~/.bashrc、④ /etc/bashrc
- CentOS7关闭自动下载更新
- To simulate the routings in Linux—core—common open research emulator
- 2012级计科班—嵌入式开发—机试要求
- GCC中同时使用动态和静态库链接的编译
- MySql中文乱码问题解决
- 对于OpenStack ,Docker1.0意味着什么?
- porting libiconv to android(arm)——libiconv-1.14.tar.gz
- 编译cBPM-android-19—CodeBlocks—CentOS7— ndk10—编译libiconv和xerces-c
- (OK) 在CentOS7—编译OpenSSL 静态库—for—Android