最长有序子序列。
一个DP就好。
例如:1 7 3 5 9 4 8;
DP数组 分为6次更新。
1 7 3 5 9 4 8;
0 0 0 0 0 0 0
1 1 1 1 1 1
1 2 2 1 2
2 3 2 3
4 2 3
2 3
4
DP数组为: 0 1 1 2 4 2 4; 最大的4分别为(1 ,3 ,5 ,9)和(1 ,3 ,5 ,8)
所以为4.
POJ AC代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
int a[1001],i,j,dp[1001];
for(i=0;i<n;i++)
scanf("%d",&a[i]),dp[i]=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(a[j]>a[i]&&dp[j]<=dp[i])
dp[j]++;
}
j=dp[0];
for(i=0;i<n;i++)
j=max(dp[i],j);
printf("%d\n",j+1);
}
}