hdu 1159 Common Subsequence(最长公共子序列 DP)

时间:2021-09-19 23:28:40

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159

Common Subsequence

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

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
 
题目大意:找到最长公共子序列,如:abcfbc abfcab 这个的最长公共子序列为abfc或abcb 所以输出4!
 
题目思路:定义一个dp[i][j]的二维数组。用来表示最长的公共子序列数。i表示第一个字符串的开始位置,j表示第二个字符串的开始位置。也就是从后向前推。dp[0][0]表示从第0个到第n个的最长公共子序列数,因为结尾就是n。dp[n][n]表示的是第n个到第n个的最长公共子序列。
 
详见代码。
 #include <iostream>
#include <cstdio>
#include <cstring> using namespace std; int dp[][]; int main()
{
char a[],b[];
while (~scanf("%s%s",a,b))
{
int len1=strlen(a);
int len2=strlen(b);
memset(dp,,sizeof(dp));
for (int i=len1-;i>=;i--)
{
for (int j=len2-;j>=;j--)
{
if (a[i]==b[j])
dp[i][j]=dp[i+][j+]+;
else
dp[i][j]=max(dp[i+][j],dp[i][j+]);
}
}
printf ("%d\n",dp[][]);
}
return ;
}
 

hdu 1159 Common Subsequence(最长公共子序列 DP)的更多相关文章

  1. HDU 1159 Common Subsequence 最长公共子序列

    HDU 1159 Common Subsequence 最长公共子序列 题意 给你两个字符串,求出这两个字符串的最长公共子序列,这里的子序列不一定是连续的,只要满足前后关系就可以. 解题思路 这个当然 ...

  2. C&plus;&plus;版 - Lintcode 77-Longest Common Subsequence最长公共子序列&lpar;LCS&rpar; - 题解

    版权声明:本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C++版 - L ...

  3. POJ 1458 Common Subsequence&lpar;最长公共子序列LCS&rpar;

    POJ1458 Common Subsequence(最长公共子序列LCS) http://poj.org/problem?id=1458 题意: 给你两个字符串, 要你求出两个字符串的最长公共子序列 ...

  4. lintcode 77&period;Longest Common Subsequence&lpar;最长公共子序列&rpar;、79&period; Longest Common Substring&lpar;最长公共子串&rpar;

    Longest Common Subsequence最长公共子序列: 每个dp位置表示的是第i.j个字母的最长公共子序列 class Solution { public: int findLength ...

  5. LCS(Longest Common Subsequence 最长公共子序列)

    最长公共子序列 英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已 ...

  6. LCS修改版(Longest Common Subsequence 最长公共子序列)

    题目描述 作为一名情报局特工,Nova君(2号)有着特殊的传达情报的技巧.为了避免被窃取情报,每次传达时,他都会发出两句旁人看来意义不明话,实际上暗号已经暗含其中.解密的方法很简单,分别从两句话里删掉 ...

  7. POJ 1458 Common Subsequence 最长公共子序列

    题目大意:求两个字符串的最长公共子序列 题目思路:dp[i][j] 表示第一个字符串前i位 和 第二个字符串前j位的最长公共子序列 #include<stdio.h> #include&l ...

  8. LCS&lpar;Longest Common Subsequence&rpar;最长公共子序列

    最长公共子序列(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题.这与查找最长公共子串的问题不同的地方是:子序列不需要在原序列中占用连续的位置 .最长公共子序列问题是 ...

  9. PKU 1458 Common Subsequence&lpar;最长公共子序列,dp,简单&rpar;

    题目 同:ZJU 1733,HDU 1159 #include <stdio.h> #include <string.h> #include <algorithm> ...

随机推荐

  1. C&plus;&plus; 与 php 的交互 之----- C&plus;&plus; 异步获取 网页文字内容,异步获取 php 的 echo 值。

    已搬迁至 http://www.cnblogs.com/linguanh/p/4543836.html

  2. js 监听输入框输入事件兼容ie7

    $(element).bind("input propertychange",function(){});

  3. 超简单的卸载ORACLE 11g

    本机环境 win10 64位 找到安装目录下的 F:\app\Shuai\product\11.2.0\dbhome_1 按键盘d找到deinstall文件夹进入 管理员运行deinstall.bat ...

  4. Java数据结构漫谈-Stack

    Stack(栈)是一种比较典型的数据结构,其元素满足后进先出(LIFO)的特点. Java中Stack的实现继承自Vector,所以其天然的具有了一些Vector的特点,所以栈也是线程安全的. cla ...

  5. CSS 学习笔记 - Flex 布局

    传统布局方式的局限性 传统的网页布局方式,采用 display + position + float 的方式来实现.这种方式,无法实现一些复杂的布局,并且在实现某些布局时,会有一些局限性. 比如,最常 ...

  6. URI编码时遇到特殊字符的处理方式

    今天遇到一个问题,在向一个地址发起get请求时,某个参数是这种形式:foo=xx&&yyyy,其中"&&"是参数值的一部分,在调用这个接口时,后台收 ...

  7. 【Java并发&period;1】简介

    继上一本<深入理解Java虚拟机>之后,学习计划里的另一本书<Java并发编程实战>现在开始学习,并记录学习笔记. 第一章主要内容是介绍 并发 的简介.发展.特点. 编写正确的 ...

  8. windows10如何打开vhd文件

    本人电脑安装了Visual Studio 2017,但是由于项目需求需要Core SDK(2.0)的版本支持,也就是2017最新版.所以现在需要利用visual Studio 2017最新版本的安装包 ...

  9. 关于VMware虚拟机磁盘收缩的几种方法

    VMware虚拟机在使用过程中,随着软件和数据的增多,虚拟磁盘占用的硬盘空间会逐渐增大,但删除数据后,却不会自动减小占用的物理硬盘空间 而是继续占用相应大小.如果需要解决上面的问题,就需要收缩wmwa ...

  10. Django get&lowbar;object &comma;get&lowbar;queryset方法

    Django提供了很多通用的基于类的视图(Class Based View),可以帮我们简化执行以下操作的代码.这些基于类的视图还提供了get_queryset, get_context_data和g ...