链接:http://poj.org/problem?id=2533
用动态规划方法求序列的最长上升子序列(LIS)。相当于是一个模板了。
/***** 最长上升/不下降子序列 *****/
/***** Longest Increasing Subsequence ******/
/***** LIS *****/
#include<iostream>
#include<cstring>
#define MAXN 1010
using namespace std;
int num[MAXN];
int dp[MAXN];
int n,maxl;
void longest()
{
int i,j;
for(i=0;i<n;i++)
{
dp[i]=1;
for(j=0;j<i;j++)
if(num[j]<num[i]&&dp[i]<dp[j]+1)
dp[i]=dp[j]+1;
if(maxl<dp[i])
maxl=dp[i];
}
return ;
}
int main()
{
int i;
while(cin>>n)
{
for(i=0;i<n;i++)
cin>>num[i];
maxl=0;
//memset(dp,0,sizeof(dp));
longest();
cout<<maxl<<endl;
}
return 0;
}