HDU 1159 Common Subsequence 最长公共子序列

题意

给你两个字符串,求出这两个字符串的最长公共子序列,这里的子序列不一定是连续的,只要满足前后关系就可以。

解题思路

这个当然要使用动态规划了。

这里\(dp[i][j]\)代表第一个串的前\(i\)个字符和第二个串的前\(j\)个字符中最长的公共子序列的最长长度,递推关系如下:

\[d[i][j]= \begin{cases} dp[i-1][j-1]+1 & \text{if} &str1[i]==str2[j] \\ max(dp[i-1][j], dp[i][j-1]) & \text{if } &str1[i]!=str2[j] \end{cases}
\]

优化:这里我们看到,每次的\(dp[i][j]\)的更新仅需要当前前一行\(dp[i-1][j-1]\),\(dp[i-1][j]\)的值还有当前行的\(dp[i][j-1]\)的值,所以我们可以进行空间优化,开辟空间为\(dp[maxn][2]\)

代码实现

//带有空间优化的
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1005;
int dp[maxn][2];
char s1[maxn], s2[maxn];
int main()
{
int len1, len2;
while(scanf("%s %s", s1+1, s2+1)!=EOF)
{
memset(dp, 0, sizeof(dp));
len1=strlen(s1+1);
len2=strlen(s2+1);
int flag=0;
for(int i=1; i<=len1; i++)
{
for(int j=1; j<=len2; j++)
{
if(s1[i]==s2[j])
dp[j][flag]=dp[j-1][!flag]+1;
else
dp[j][flag]=max(dp[j][!flag], dp[j-1][flag]);
}
flag=!flag;
}
printf("%d\n", dp[len2][!flag]);
}
return 0;
}
//没有空间优化的代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1005;
int dp[maxn][2];
char s1[maxn], s2[maxn];
int main()
{
int len1, len2;
while(scanf("%s %s", s1+1, s2+1)!=EOF)
{
memset(dp, 0, sizeof(dp));
len1=strlen(s1+1);
len2=strlen(s2+1);
int flag=0;
for(int i=1; i<=len1; i++)
{
for(int j=1; j<=len2; j++)
{
if(s1[i]==s2[j])
dp[j][i%2]=dp[j-1][(i-1)%2]+1;
else
dp[j][i%2]=max(dp[j][(i-1)%2], dp[j-1][i%2]);
}
}
printf("%d\n", dp[len2][len1%2]);
}
return 0;
}

HDU 1159 Common Subsequence 最长公共子序列的更多相关文章

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

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...

  2. C++版 - Lintcode 77-Longest Common Subsequence最长公共子序列(LCS) - 题解

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

  3. POJ 1458 Common Subsequence(最长公共子序列LCS)

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

  4. lintcode 77.Longest Common Subsequence(最长公共子序列)、79. Longest Common Substring(最长公共子串)

    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(Longest Common Subsequence)最长公共子序列

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

  9. PKU 1458 Common Subsequence(最长公共子序列,dp,简单)

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

随机推荐

  1. CPU风扇转速异常

    本文适用于Ubuntu 16.04,造冰箱的大熊猫@cnblogs 2018/10/9 近日发现一个问题,新笔记本的CPU风扇转速很高.笔记本刚刚启动,就能听到风扇呼呼的声音,转速高的异常.以前不是这 ...

  2. protoc 编译工具

    在进行开发 protoc 之前,你需要首先在你的计算机中安装 protoc 编译工具. 下载编译工具 进入 Protocol Buffers 的源代码中然后选择发布的版本中,找到对应的版本.项目的链接 ...

  3. CF 354 D 迷宫与门的旋转 BFS +状态压缩 一定要回头看看

    D. Theseus and labyrinth time limit per test 3 seconds memory limit per test 256 megabytes input sta ...

  4. (转载)rabbitmq与springboot的安装与集成

    原文地址:https://segmentfault.com/a/1190000016991529 一.前言 RabbitMQ是一个开源的消息代理软件(面向消息的中间件),它的核心作用就是创建消息队列, ...

  5. BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (Burnside引理、组合计数)

    题目链接 (Luogu) https://www.luogu.org/problem/P4727 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.ph ...

  6. java从ldap中导出数据到ldif文件中

    原创:http://www.cnblogs.com/dqcer/p/7814034.html 导入ldap.jar包,笔者已对下面两个文件测试并通过.若有疑问欢迎留言 LDAPExport.java ...

  7. 关于MYSQL日期 字符串 时间戳互转

    时间转字符串: select date_format(now(), '%Y-%m-%d'); #结果:2016-01-05 时间转时间戳: select unix_timestamp(now()); ...

  8. python3笔记十三:python数据类型-Set集合

    一:学习内容 集合概念 集合创建 集合添加 集合插入 集合删除 集合访问 集合操作:并集.交集 二:集合概念 1.set:类似dict,是一组key的集合,不存储value 2.本质:无序和无重复元素 ...

  9. CentOS 6.4 yum快速搭建Zabbix 2.2版本(中文)

    1.安装zabbix官方epel包 rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6. ...

  10. vue 钩子函数中获取不到DOM节点

    原文链接:https://jingyan.baidu.com/article/f96699bbfe9c9d894f3c1b4b.html 两种解决方案: 1:官方解决方案: 受到 HTML 本身的一些 ...