POJ-2479(DP)

Posted IF

tags:

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

一个线性DP的经典入门题,不难,但是看到有的大神写出来的时间只有两位数的时间,最快的16MS,真是想破脑袋也做不到。

 1 /*Memory:704K Time:422MS */
 2 
 3 #include<cstdio>
 4 #include<algorithm>
 5 using namespace std;
 6 int a[50001],left[50001],right[50001];
 7 void maxsum()
 8 {
 9     int t,n,i,res;
10     scanf("%d",&t);
11         while(t--)
12         {
13             scanf("%d",&n);
14             for(i=0;i<n;i++)
15             {
16                 scanf("%d",&a[i]);
17             }
18             left[0]=a[0];
19             right[n-1]=a[n-1];
20             for(i=1;i<n;i++)
21             {
22                 if(left[i-1]<0)left[i]=a[i];
23                 else left[i]=left[i-1]+a[i];
24                 if(right[n-i]<0)right[n-i-1]=a[n-i-1];
25                 else right[n-i-1]=right[n-i]+a[n-i-1];
26             }
27             for(i=1;i<n;i++)
28             {
29                 left[i]=max(left[i],left[i-1]);
30                 right[n-i-1]=max(right[n-i],right[n-i-1]);
31             }
32             res=-1000000;
33             for(i=1;i<n;i++)
34             {
35                 res=max(res,left[i-1]+right[i]);
36             }
37             printf("%d\n",res);
38         }
39 }
40 int main()
41 {
42     maxsum();
43     return 0;
44 }

 

以上是关于POJ-2479(DP)的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2479 Maximum sum(双向DP)

poj 2479 maximum sum

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

poj 2479 - Maximum sum

poj 2479 Maximum sum

[poj 2479] Maximum sum -- 转载