1000个数,求最大递增序列之和
#include <iostream>//最大递增子序列之和 可能有负数
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int num[1001],dp[1001];//dp[]当前最大和
int main()
{
int n,MAX,i,j;
while(scanf("%d",&n)!=EOF&&n!=0)
{
MAX=0;
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
dp[0]=num[0];
for(i=1;i<n;i++)
{
for(j=0;j<i;j++)
{
if(num[i]>num[j])//在i前面比i小的数
dp[i]=max(dp[i],dp[j]+num[i]);//dp[j]是j时最大值
}
//到i这个位置止,增序列和最大值,num[i]+j时的dp[最大值]=i时的dp[i]
//dp[i]最开始归零了
dp[i]=max(dp[i],num[i]); //4612359 4812359
} //12359>469 489>12359
for(i=0;i<n;i++)
{
MAX=max(MAX,dp[i]);
}
printf("%d\n",MAX);
}
return 0;
}