题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1045
经典的DP题:最长递增子序列
C语言源码:
#include<stdio.h>
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int N,M,L,i,j,Col[220],Str[10010],dp[10010],x,ma;
scanf("%d",&N);
for(i=1;i<=N;i++)
Col[i]=-1;
scanf("%d",&M);
for(i=1;i<=M;i++)
{
scanf("%d",&x);
Col[x]=i;
}
scanf("%d",&L);
for(i=1;i<=L;i++)
{
scanf("%d",&x);
Str[i]=Col[x];
}
for(i=1;i<=L;i++)
{
if(Str[i]>0)
dp[i]=1;
else
dp[i]=0;
}
for(i=2;i<=L;i++)
{
if(Str[i]==-1)
dp[i]=0;
else
{
for(j=1;j<i;j++)
{
if(Str[i]>=Str[j])
dp[i]=max(dp[i],dp[j]+1);
}
}
}
ma=0;
for(i=1;i<=L;i++)
if(dp[i]>ma)
ma=dp[i];
printf("%d\n",ma);
return 0;
}