[poj 2479] Maximum sum -- 转载

Posted 理性、感性

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[poj 2479] Maximum sum -- 转载相关的知识,希望对你有一定的参考价值。

转自 CSND

                                    想看更多的解题报告: http://blog.csdn.net/wangjian8006/article/details/7870410
                                     转载请注明出处:
http://blog.csdn.net/wangjian8006

题目大意: 对于连续的整数和的串s1和s2,s1与s2不相交,使得s1+s2最大
解题方法: DP。
 lt[i]代表以第i个元素结尾的串最大值
 rt[i]代表以第i个元素开头的串的最大值
 那么设置一个rtm[i]代表取后i个元素之中最大连续子串的和

 很显然,lt[i]=max(a[i],lt[i-1]+a[i]);
 rt[i]=max(a[i],rt[i+1]+a[i]);
 rtm[i]=max(rtm[i+1],rt[i]);

此题与poj2593一模一样,但是要将MAXV改成10010就可以A了

技术分享
 1 #include <iostream>
 2 using namespace std;
 3 #define max(a,b) a>b?a:b
 4 #define MAXV 50010
 5 #define inf -10010
 6 
 7 int lt[MAXV],rt[MAXV],a[MAXV],rtm[MAXV];
 8 
 9 int main(){
10     int t,n,i,temp;
11     scanf("%d",&t);
12     while(t--){
13         scanf("%d",&n);
14         for(i=1;i<=n;i++)
15             scanf("%d",&a[i]);
16 
17         temp=inf;lt[1]=a[1];rt[n]=a[n];
18         for(i=2;i<=n;i++){
19             lt[i]=max(a[i],lt[i-1]+a[i]);        
20         }
21         for(i=n-1;i>=1;i--){
22             rt[i]=max(a[i],rt[i+1]+a[i]);
23         }
24 
25         rtm[n]=rt[n];
26         for(i=n-1;i>=1;i--)
27             rtm[i]=max(rtm[i+1],rt[i]);
28 
29         int ma=inf;
30         for(i=2;i<=n;i++){
31             ma=max(ma,lt[i-1]+rtm[i]);
32         }
33         printf("%d\n",ma);
34 
35     }
36     return 0;
37 }
View Code

 


 

以上是关于[poj 2479] Maximum sum -- 转载的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2479 Maximum sum

POJ 2479 Maximum sum(双向DP)

poj 2479 Maximum sum

Maximum sum(poj 2479)

POJ2479 Maximum sum[DP|最大子段和]

poj 2479 maximum sum