poj-2479 Maximum sum DP
2014-09-03 09:40
423 查看
题目链接
题目大意:给一个数列,求出数列中不相交的2个子段和,求和最大。
题目大意:给一个数列,求出数列中不相交的2个子段和,求和最大。
#include <stdio.h> #include <string.h> #include <iostream> #include <queue> #include <functional> #include <vector> #include <algorithm> using namespace std; typedef __int64 LL; const int maxn = 50005; const int inf = 2000000001; int n; int num[maxn],ld[maxn],rd[maxn]; int main() { #ifndef ONLINE_JUDGE freopen("data.txt","r",stdin); #endif int cas; scanf("%d",&cas); while( cas -- ) { scanf("%d",&n); for( int i = 1; i <= n; i ++ ) scanf("%d",&num[i]); ld[1] = num[1]; for( int i = 2; i <= n; i ++ ) { if( ld[i-1] < 0 ) ld[i] = num[i]; else ld[i] = ld[i-1] + num[i]; } for( int i = 2; i <= n; i ++ ) ld[i] = max( ld[i-1],ld[i] ); rd = num ; for( int i = n-1; i >= 1; i -- ) { if( rd[i+1] < 0 ) rd[i] = num[i]; else rd[i] = rd[i+1] + num[i]; } for( int i = n-1; i >= 1; i -- ) rd[i] = max( rd[i+1],rd[i] ); int ans = -inf; for( int i = 2; i <= n; i ++ ) ans = max( ans,ld[i-1] + rd[i] ); printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ 2479 Maximum sum & POJ 2573 Max Sequence (DP,最大连续子串和)
- POJ 2479 Maximum sum && 2593 Max Sequence (dp)买一送一
- poj 2479 dp Maximum sum求两段连续不重叠子段的最大和
- POJ2479 Maximum sum DP
- POJ 2479 Maximum sum && POJ 2593 Max Sequence
- POJ 2479 Maximum sum && sicily 1090
- poj 2479 Maximum sum && poj 2593 Max Sequence
- POJ&nbsp;2479&nbsp;Maximum&nbsp;sum
- poj 2479 Maximum sum poj 2593 Max Sequence
- POJ 2479 (算不上简单的dp,可以称为简单的求两个子串和最大)
- POJ 2479 Maximum sum(双向DP)
- POJ 2229 Sumsets(基础dp)
- POJ 2229-Sumsets(DP)
- poj 1185 炮兵阵地 状态压缩+dp sum dp,s,Map
- POJ 2229 Sumsets(DP计数问题)
- POJ 2479 Maximum sum[DP]
- POJ 3132 & ZOJ 2822 Sum of Different Primes(dp)
- Problem 67 Maximum path sum II (dp)
- Binary Tree Maximum Path Sum [leetcode] dp
- poj-2479 简单DP