题目链接 题意:给你一段正整数序列求最大两个子序列和且不相交 思路:正着从左到右记录1到i范围内的最大子序列和,然后逆着记录n到i的最大子序列和最后把左右两部分相加寻找最大值 #include <iostream> #include <algorithm> using namespace std; const int maxn=100100; const int INF=-1e7; int dp[maxn],arr[maxn]; int n,sum,Max,ans; int main() { while(cin>>n&&n!=0) { sum=0,Max=INF; for(int i=1;i<=n;i++)//正着记录 { cin>>arr[i]; sum+=arr[i]; Max=max(sum,Max); dp[i]=Max; if(sum<0) sum=0; } dp[0]=INF,sum=0,Max=INF,ans=INF; for(int i=n;i>=1;i--)//反着记录 { sum+=arr[i]; Max=max(Max,sum); ans=max(ans,Max+dp[i-1]);//寻找最大值 if(sum<0) sum=0; } cout<<ans<<endl; } }