• UVA 111


    又被题意坑了...

    输入的一串数字的含义是第i个数字是第a[i]个发生的。而不是编号为i的历史事件的实际发生顺序。所以第一步要做的是转换,将原始数据转换成编号为i的历史事件的实际发生顺序。然后按照实际的发生顺序在aaa数组中给予权值,这是为了方便之后判断学生的答案中两个数字的相对顺序。

    #include<stdio.h>
    #include<string.h>
    int aa[21];//存储初步转换完成后的标准事件顺序
    int aaa[21];//存储标准事件顺序的权值,方便以后比较两个数的相对大小
    int ttmp[21];//存储转换完成后的考生答案
    int dp[21];//记录第i个数之前最长的字串
    int main()
    {
        int a,tmp,maxx;
        int i,j;
        scanf("%d",&a);
        for(i=1;i<=a;i++)
        {
            scanf("%d",&tmp);
            aa[tmp]=i;
        }
        for(i=1;i<=a;i++)
        {
            aaa[aa[i]]=i;
        }
        while(scanf("%d",&tmp)!=EOF)
        {
            ttmp[tmp]=1;
            for(i=1;i<=a;i++)
            {
                dp[i]=1;
            }
            for(i=2;i<=a;i++)
            {
                scanf("%d",&tmp);
                ttmp[tmp]=i;
            }
            for(i=2;i<=a;i++)
            {
                maxx=0;
                for(j=i;j>=1;j--)
                {
                    if(aaa[ttmp[i]]>aaa[ttmp[j]]&&maxx<dp[j])
                    {
                        maxx=dp[j];
                        if(dp[j]>=j)
                            break;
                    }
                }
                dp[i]+=maxx;
            }
            maxx=0;
            for(i=1;i<=a;i++)
            {
                if(maxx<dp[i])
                    maxx=dp[i];
            }
            printf("%d
    ",maxx);
        }
        return 0;
    }
  • 相关阅读:
    python-实现选择排序
    python-实现冒泡排序
    python-实现双端队列
    python-实现队列结构
    python-实现单向循环链表
    类型转换
    uint64_t类型输出为十六进制格式
    python文件的写入与读出
    linux系统中安装虚拟机
    IPv4和IPv6地址的存取
  • 原文地址:https://www.cnblogs.com/tun117/p/4429298.html
Copyright © 2020-2023  润新知