题目大意:
给定一个数组,求两个不相交的子串的最大和。
思路:正向遍历动规,dp[i] 来存 第i个最大值,然后逆向遍历相加
看代码:
#include <iostream>
using namespace std;
long long n;
int num[100003];
int dp[100003];
int main()
{
int t,ans;
while(cin>>n &&n)
{
t = -1002,ans=0;
for(int i=0; i <n;i++)
{//正向求出最大和
cin>>num[i];
ans+= num[i];
if(ans>t)
t = ans;
if(ans<0)
ans = 0;
dp[i] = t;
}
ans = -1002,t = -1002;
int sum=0;
for(int j = n-1; j >0; j--)
{//逆向求最大和,相加
sum+=num[j];
if(sum > t)
t =sum;
if(sum<0)
sum =0;
if(t+ dp[j-1] > ans)
ans = t + dp[j-1];
}
cout<<ans<<endl;
}
//cout << "Hello world!" << endl;
return 0;
}