• BNUOJ 4215 最长公共连续子序列


    最长公共连续子序列

    1000ms
    65536KB
     
    64-bit integer IO format: %lld      Java class name: Main
     

     给你两个序列S1和S2,长度分别是L1,L2 (1 <= L1 , L2 <= 180). 

     
    写一个程序找出最长的连续公共子序列。
     
    连续子序列定义为序列中连续的一个片段。例如序列"1 2 3"的子串有空串,"1","2","3","1 2","2 3","1 2 3"。
     

    Input

    第1行:两个整数L1,L2,以一个空格隔开。

    第2行到第L1+1行:每行一个整数,第i+1行给出S1中的第i个数。
    第L1+2行到第L1+L2+1行:每行一个整数,第L1+i+1行给出S1中的第i个数。
     

    Output

     一个整数,给出S1和S2的最长连续子序列的长度

     

    Sample Input

    10 12
    1
    1
    1
    3
    2
    3
    3
    3
    4
    5
    1
    1
    1
    1
    3
    2
    3
    3
    4
    4
    5
    -8
     

    Sample Output

    7
     

    Source

     
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <vector>
     6 #include <climits>
     7 #include <algorithm>
     8 #include <cmath>
     9 #define LL long long
    10 using namespace std;
    11 int a[200],b[200],dp[200][200];
    12 int main(){
    13     int n,m,i,j,ans;
    14     while(~scanf("%d %d",&n,&m)){
    15        for(i = 1; i <= n; i++)
    16             scanf("%d",a+i);
    17         for(j = 1; j <= m; j++)
    18             scanf("%d",b+j);
    19         memset(dp,0,sizeof(dp));
    20         for(ans = 0,i = 1; i <= n; i++){
    21             for(j = 1; j <= m; j++){
    22                 if(a[i] == b[j]){
    23                     dp[i][j] = dp[i-1][j-1]+1;
    24                 }
    25                 if(dp[i][j] > ans) ans = dp[i][j];
    26             }
    27         }
    28         printf("%d
    ",ans);
    29     }
    30     return 0;
    31 }
    View Code
  • 相关阅读:
    如何实现Iframe透明
    ListView(未完)
    我又回来了
    前言
    代码重用and思路重用
    图片上传
    千万数量级分页存储过程
    MSSQL中,将text,ntext转换为int型数据
    优秀的回复,来自圣殿骑士
    SqlDataSource控件
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/3835730.html
Copyright © 2020-2023  润新知