111 History Grading

描述:题意倒是挺难理解的:给出一个整数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;
}


原文地址:https://www.cnblogs.com/xinyuyuanm/p/2999161.html