111 - History Grading

来源:互联网 发布:淘宝lg生活海外旗舰店 编辑:程序博客网 时间:2024/06/07 02:04
描述:题意倒是挺难理解的:给出一个整数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;}

原创粉丝点击