• nyoj-36-最长公共子序列


    http://acm.nyist.net/JudgeOnline/problem.php?pid=36

    最长公共子序列

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
    描述
    咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
    tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。
    输入
    第一行给出一个整数N(0<N<100)表示待测数据组数
    接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000.
    输出
    每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
    样例输入
    2 asdf adfsd 123abc abc123abc
    样例输出
    3 6

    解题思路:求最长公共子序列,经典DP,详情请看代码=-=

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <stdlib.h>
     4 #include <math.h>
     5 #include <string.h>
     6 
     7 using namespace std;
     8 
     9 const int MAXN = 1010;
    10 
    11 //输入
    12 char s[MAXN], t[MAXN];
    13 //dp数组
    14 int dp[MAXN][MAXN];
    15 
    16 void solve(){
    17     int n, m;
    18     n = strlen(s);
    19     m = strlen(t);
    20     memset(dp, 0sizeof(dp));
    21     for(int i = 0; i < n; i++){
    22         for(int j = 0; j < m; j++){
    23             if(s[i] == t[j]){
    24                 dp[i + 1][j + 1] = dp[i][j] + 1;
    25             }
    26             else{
    27                 dp[i + 1][j + 1] = max(dp[i + 1][j], dp[i][j + 1]);
    28             }
    29         }
    30     }
    31     cout << dp[n][m] << endl;
    32 }
    33 
    34 int main(){
    35     int T;
    36     cin >> T;
    37     while(T--){
    38         cin >> s >> t;
    39         solve();
    40     }
    41     return 0;

    42 } 

  • 相关阅读:
    字符串转输入流、输入流转字符串
    base64编码与解码
    PHP AES/ECB 128加密
    JQ下拉加载更多
    php记录代码执行时间
    PHP SOAP 提交XML
    AES 加密 PHP 和 JAVA 互通
    PHP RSA算法 HMAC-SHA1加密算法
    php SHA256Hex加密
    php UTF8 转字节数组,后使用 MD5 计算摘要
  • 原文地址:https://www.cnblogs.com/angle-qqs/p/4101897.html
Copyright © 2020-2023  润新知