给出一个整数序列,求出两个连续序列和的和最大值,这两个序列不必连续,但是不能交叉
可以先正向求一次最大和,dp[i]表示i之前包括i的最大连续和的值
然后反向求一次最大和,相加dp[i]对比求出最大值
#include <stdio.h> #define MIN -9999999 int main() { int T; scanf("%d",&T); int sum,tmp,n,ans; int num[50001],dp[50001]; while(T--) { scanf("%d",&n); sum=0; tmp=MIN; for(int i=0;i<n;i++) { scanf("%d",&num[i]); sum+=num[i]; if(sum>tmp) tmp=sum; dp[i]=tmp; if(sum<0) sum=0; } sum=0; tmp=ans=MIN; for(int i=n-1;i>0;i--) { sum+=num[i]; if(sum>tmp) tmp=sum; if(tmp+dp[i-1]>ans) ans=tmp+dp[i-1]; if(sum<0) sum=0; } printf("%d\n",ans); } return 0; }