动态规划
最大递增子段和
状态转移方程 dp[i]=max(dp[j])+v[i] 0<=j<=i 且v[j]<v[i]
#include<bits/stdc++>
using namespace std;
long long v[1020],dp[1020];
int main()
{
int N;
while(scanf("%d",&N)==1&&N)
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=N;i++)
scanf("%I64d",&v[i]);
for(int i=1;i<=N;i++)
{
long long maxv=0;
for(int j=0;j<=i-1;j++)
{
if(v[j]<v[i]&&dp[j]>maxv)
maxv=dp[j];
}
dp[i]=maxv+v[i];
}
long long ans=0;
for(int i=1;i<=N;i++)
{
if(dp[i]>ans)
ans=dp[i];
}
printf("%I64d\n",ans);
}
return 0;
}