POJ 2479 Maximum sum
来源:互联网 发布:java程序员优秀简历 编辑:程序博客网 时间:2024/04/30 11:14
题意:给你一个数列,求出数列中不相交的两个子段和,要求和最大。
Sol:对于每个i来说,求出 [ 0 ~ i-1 ] 的最大子段和以及 [ i ~ n-1 ] 的最大子段和,在加起来,求一个最大的就可以了。
[ 0 ~ i-1 ] 的最大子段和从左向右扫描 , [ i ~ n-1 ] 从右向左扫描。
复杂度O(n)
#include <cstdio>#include <algorithm>using namespace std;const int maxn = 50000 + 10;int a[maxn],left[maxn],right[maxn];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];elseleft[i]=left[i-1]+a[i];}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];elseright[j]=right[j+1]+a[j];}for(int i=n-2;i>=0;i--)right[i]=max(right[i+1],right[i]);int res=-100000000;for(int i=1;i<n;i++)res=max(res,left[i-1]+right[i]);printf("%d\n",res);}return 0;}
0 0
- poj 2479 Maximum sum
- POJ 2479 Maximum sum
- POJ 2479 Maximum sum
- POJ 2479 Maximum sum
- poj 2479 Maximum sum
- Poj 2479 Maximum sum
- POJ-2479-Maximum sum
- POJ 2479 Maximum sum
- poj 2479 Maximum sum
- poj 2479 Maximum sum
- poj 2479 Maximum sum
- POJ 2479 Maximum sum
- POJ 2479 Maximum sum
- POJ 2479 Maximum sum
- poj 2479 - Maximum sum
- POJ 2479 Maximum sum
- POJ 2479 Maximum sum
- poj-2479 Maximum sum
- Sicily1121
- 堆和栈的区别以及衍生出来的栈的效率为什么比堆高
- sgu118:Digital root
- 你想创业吗?我们在寻找以下有慧眼的您:
- X86_64上没有写C函数声明导致的BUG(warning: initialization makes pointer from integer without a cast)
- POJ 2479 Maximum sum
- 使用synchronized的方法和作用
- css sprite 介绍和实例
- SGU 553 Sultan's Pearls
- 杨辉三角
- 【Container讲师】道里云毛文波:网络虚拟化与SDN实现Docker连通
- poj1008
- 判断字符串是不是回文的两种方法
- IsoMap实战