题意:给你一段正整数序列求最大两个子序列和且不相交
思路:正着从左到右记录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;
}
}