hdu 1423 最长公共上升子序列
#include<stdio.h> #include<string.h> int a[510],b[510]; int dp[510]; int main() { int t,m,n,i,j; scanf("%d",&t); while(t--) { scanf("%d",&m); for(i=1;i<=m;i++) scanf("%d",&a[i]); scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&b[i]); memset(dp,0,sizeof(dp)); int ans=0,k; dp[0]=-1; for(i=1;i<=m;i++) { k=0; for(j=1;j<=n;j++) { if(b[j]<a[i]&&dp[j]>dp[k]) k=j; if(b[j]==a[i]) dp[j]=(dp[k]>=0?dp[k]:0)+1; } } for(i=0;i<=500;i++) { if(ans<dp[i]) ans=dp[i]; } printf("%d\n",ans); if(t) printf("\n"); } return 0; }