• uva 111 History Grading


    简单的动态规划题,不过题目意思很蛋疼;

    刚刚开始认为是最长上升子序列,错的一塌糊涂;

    后来看了斌牛的题解才知道是最长公共子序列;

    题解:

    当a[i]==b[j],d(i,j)=(i-1,j-1)+1;

    else d(i,j)=max(d(i,j-1),d(i-1,j));

    代码:

     1 #include<cstdio>
     2 #define maxn 25
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int a[maxn],b[maxn],f[maxn][maxn];
     7 int main()
     8 {
     9     int n,x;
    10     scanf("%d",&n);
    11     for(int i=1; i<=n; i++)
    12     {
    13         scanf("%d",&x);
    14         a[x]=i;
    15     }
    16     while(scanf("%d",&x)!=EOF)
    17     {
    18         b[x]=1;
    19         for(int i=2; i<=n; i++)
    20         {
    21             scanf("%d",&x);
    22             b[x]=i;
    23         }
    24         memset(f,0,sizeof f);
    25         for(int i=1;i<=n;i++)
    26             for(int j=1;j<=n;j++)
    27             {
    28                 if(a[i]==b[j])f[i][j]=f[i-1][j-1]+1;
    29                 else f[i][j]=max(f[i-1][j],f[i][j-1]);
    30             }
    31         printf("%d
    ", f[n][n]);
    32     }
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    HTML5学习记录
    CSS学习记录
    HTML扩展(thead,tbody,tfoot标签的使用)
    测删除功能
    jmeter-连接数据库
    jmeter-正则表达式提取器
    jmeter常用函数
    java基础(二)
    git基本使用
    波特的钻石模型
  • 原文地址:https://www.cnblogs.com/yours1103/p/3352007.html
Copyright © 2020-2023  润新知