#include <iostream>
#include<stdio.h>
#include <cstring>
using namespace std;
#define MAX_N (1000+1)
int N[MAX_N];
int dp[MAX_N]; //dp[i] 以N[i]为最大元素的刚好截止于i的 lcis最大长度
//
int n;
int main()
{
while(cin>>n)
{
int maxp;
for(int i=1;i<=n;i++)
cin>>N[i];
N[0]=-1; //这里设置N[0] = -1是因为 N integers in the range from 0 to 10000 each
memset(dp,0,sizeof(dp));
dp[0]=0;
for(int i=1;i<=n;i++)
{
maxp=-1;
for(int j=0;j<i;j++)
{
if(N[i] > N[j] && dp[j] > maxp)
{
maxp=dp[j];
}
}
dp[i] = maxp+1;
}
maxp = -1;
for(int i=1;i<=n;i++)
if(dp[i] > maxp)
maxp = dp[i];
cout<<maxp<<endl;
}
}
poj 2533 数组的最长上升子序列
最新推荐文章于 2021-08-02 16:03:10 发布