最大递增子段和,状态方程:sum[j]=max{sum[i]}+a[j]; 其中,0<=i<=j,a[i]<a[j]
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
#define Maxn 2000
using namespace std;
#define ll __int64
#define LL long
int save[Maxn];
LL dp[Maxn];
int n,x,ans,k,knum;
void work()
{
for(int i=1;i<=n;i++)
{
scanf("%lld",&save[i]);
}
for(int i=1;i<=n;i++)
{
dp[i]=save[i];
for(int j=1;j<=i-1;j++)
{
if(save[i]>save[j])
dp[i]=max(dp[i],dp[j]+save[i]);
//dp[i]=max(dp[i],dp[j]+check(i,j));
}
}
LL ans=0;
for(int i=1;i<=n;i++)
{
ans=max(ans,dp[i]);
}
printf("%lld\n",ans);
}
int main()
{
while(scanf("%d",&n)&&n)
{
memset(dp,0,sizeof(dp));
work();
}
return 0;
}