题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257
解题思路:
最长递增子序列,感觉只是把最长公共递增子序列变了一个形而已,其实实质都是一样的。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i,j,l1,l2;
int a[1000],b[1000],dp[1000];
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
memset(dp,0,sizeof(dp));
int maxn;
for(i=1;i<=n;i++)
{
maxn=0;
for(j=1;j<=n;j++)
{
if(a[i]>b[j]&&maxn<dp[j])
maxn=dp[j];
if(a[i]==b[j])
dp[j]=maxn+1;
}
}
maxn=0;
for(i=1;i<=n;i++)
if(maxn<dp[i])
maxn=dp[i];
printf("%d\n",maxn);
}
return 0;
}