就是求最长上升序列。
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#define max(a,b) a>b?a:b
using namespace std;
int main()
{
int n,i,j,a[1006],dp[1005];
while(scanf("%d",&n),n)
{
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(dp,0,sizeof(dp));
int max=-1;
for(i=1;i<=n;i++)
{
dp[i]=a[i];
for(j=1;j<i;j++)
{
if(a[j]<a[i])
dp[i]=max(dp[i],dp[j]+a[i]);//若a[j]<a[i],则可直接在dp[j]的状态下加上a[i],由此递归得出答案
}
if(dp[i]>max)
max=dp[i];
}
printf("%d\n",max);
}
return 0;
}