描述:题意倒是挺难理解的:给出一个整数n,下一行有n个数,这是正确答案,但是需要转化一下 10 3 1 2 4 9 5 10 6 8 7 ->代表第一件事发生在下标3,第二件事发生在下标1,第三件事发生在下标2……-> 2 3 1 4 6 8 10 9 5 7,以后的输入都要转化,并且和第一次输入的作比较,查找两个数组最大的子序列,输出最大子序列个数 #include <cstdio> #include <cstring> int main() { //freopen("a.txt","r",stdin); int n,m; int num[25],s[25],v[25][25]; scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d",&m); num[m]=i; } while(scanf("%d",&m)!=EOF) { s[m]=0; for(int i=1; i<n; i++) { scanf("%d",&m); s[m]=i; } memset(v,0,sizeof(v)); for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) if(num[i]==s[j]) v[i][j]=v[i-1][j-1]+1; else v[i][j]=v[i-1][j]>v[i][j-1]?v[i-1][j]:v[i][j-1]; } printf("%d\n",v[n][n]); } return 0; }