PKU POJ 2479 Maximum sum 最大连续子序列和
这里子序列不能为空,至少要一个,特殊一点。
View Code
#include <iostream> #include <stdio.h> using namespace std; __int64 n,a[50005],dpl[50005],dpr[50005]; int main() { __int64 T,i,sum,mmax; scanf("%I64d",&T); while (T--) { scanf("%I64d",&n); for (i=0;i<n;++i) scanf("%I64d",&a[i]); sum=dpl[0]=a[0]; for (i=1;i<n;++i) { dpl[i]=dpl[i-1]; sum+=a[i]; if (dpl[i]<sum) dpl[i]=sum; if (sum<a[i]) sum=a[i]; if (dpl[i]<sum) dpl[i]=sum; } sum=dpr[n-1]=a[n-1]; for (i=n-2;i>=0;--i) { dpr[i]=dpr[i+1]; sum+=a[i]; if (dpr[i]<sum) dpr[i]=sum; if (sum<a[i]) sum=a[i]; if (dpr[i]<sum) dpr[i]=sum; } for (i=0,mmax=0x8000000000000000;i<n-1;++i) if (dpl[i]+dpr[i+1]>mmax) mmax=dpl[i]+dpr[i+1]; printf("%I64d\n",mmax); } return 0; }

浙公网安备 33010602011771号