zoukankan      html  css  js  c++  java
  • HDU 1159 Common Subsequence

    Common Subsequence

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 39541    Accepted Submission(s): 18171


    Problem Description
    A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = <x1, x2, ..., xm> another sequence Z = <z1, z2, ..., zk> is a subsequence of X if there exists a strictly increasing sequence <i1, i2, ..., ik> of indices of X such that for all j = 1,2,...,k, xij = zj. For example, Z = <a, b, f, c> is a subsequence of X = <a, b, c, f, b, c> with index sequence <1, 2, 4, 6>. Given two sequences X and Y the problem is to find the length of the maximum-length common subsequence of X and Y.
    The program input is from a text file. Each data set in the file contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct. For each set of data the program prints on the standard output the length of the maximum-length common subsequence from the beginning of a separate line.
     
    Sample Input
    abcfbc abfcab
    programming contest
    abcd mnp
     
    Sample Output
    4
    2
    0
    简单动态规划
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    #include <cmath>
    #include <vector>
    #include <algorithm>
    using namespace std;
    #define lowbit(x) (x&(-x))
    #define max(x,y) (x>y?x:y)
    #define min(x,y) (x<y?x:y)
    #define mem(a) (memset(a,0,sizeof(a)))
    typedef long long ll;
    int main()
    {
        string a,b;
        while(cin>>a>>b)
        {
            int n=a.size();
            int m=b.size();
            int vis[n+5][m+5];
            memset(vis,0,sizeof(vis));
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                    if(a[i-1]==b[j-1]) vis[i][j]=vis[i-1][j-1]+1;
                    else vis[i][j]=max(vis[i][j-1],vis[i-1][j]);
                }
            }
            printf("%d
    ",vis[n][m]);
        }
        return 0;
    }
  • 相关阅读:
    Python中with用法详解
    SVM-支持向量机总结
    shell 脚本总结
    pycharm git 用法总结
    python小实例——tkinter实战(计算器)
    PyCharm 使用技巧
    博客园博文生成章节目录
    Chrome安装crx文件的插件时出现“程序包无效”
    Matplotlib pyplot中title() xlabel() ylabel()无法显示中文(即显示方框乱码)的解决办法
    Pandas-高级部分及其实验
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7183984.html
Copyright © 2011-2022 走看看