标签:
源代码: #include<cstdio> int m,n,ans(0),i1[3001],i2[3001],f[3001][3001]={0}; //二维。 int main() { scanf("%d",&m); scanf("%d",&n); for (int a=1;a<=m;a++) scanf("%d",&i1[a]); for (int a=1;a<=n;a++) scanf("%d",&i2[a]); for (int a=1;a<=m;a++) { int max(0); for (int b=1;b<=n;b++) { if (i1[a]>i2[b]&&f[a-1][b]>max) //在寻找上升序列的同时,存储其最大成功值。 max=f[a-1][b]; if (i1[a]!=i2[b]) //如不相等,则无变化。 f[a][b]=f[a-1][b]; if (i1[a]==i2[b]) //若相等,在最大值基础上+1。 f[a][b]=max+1; } } for (int a=1;a<=n;a++) ans=ans>f[m][a]?ans:f[m][a]; //已传值到底部,遍历寻找最大值,即为所求。 printf("%d",ans); return 0; }
标签:
原文地址:http://www.cnblogs.com/koruko/p/5270115.html