题目链接

基础的最长公共子序列

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e3+;
char c[maxn],d[maxn];
int dp[maxn][maxn];
int main()
{
while(scanf("%s%s",c,d)!=EOF)
{
memset(dp,,sizeof(dp));
int n=strlen(c);
int m=strlen(d);
for(int i=;i<n;i++)
for(int j=;j<m;j++)
if(c[i]==d[j])
dp[i+][j+]=dp[i][j]+;
else
dp[i+][j+]=max(dp[i+][j],dp[i][j+]);
printf("%d\n",dp[n][m]);
}
return ;
}

再附上一个既可以输出长度也可以输出字符串的代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=1e3+;
char s1[maxn],s2[maxn];
int b[maxn][maxn],dp[maxn][maxn];
void pr(int i,int j)
{
if(i==||j==) return ;
if(b[i][j]==)
{
pr(i-,j-);
printf("%c",s1[i]);
}
else if(b[i][j]==) pr(i-,j);
else pr(i,j-);
}
int main()
{
while(scanf("%s%s",s1,s2)!=EOF)
{
memset(b,,sizeof(b));
memset(dp,,sizeof(dp));
int len1=strlen(s1),len2=strlen(s2);
for(int i=len1;i>=;i--) s1[i]=s1[i-];//这里注意不要写成从前往后跑的
for(int i=len2;i>=;i--) s2[i]=s2[i-];
for(int i=;i<=len1;i++)
for(int j=;j<=len2;j++)
{
if(s1[i]==s2[j])
{
dp[i][j]=dp[i-][j-]+;
b[i][j]=;
}
else if(dp[i-][j]>dp[i][j-])
{
dp[i][j]=dp[i-][j];
b[i][j]=;
}
else
{
dp[i][j]=dp[i][j-];
b[i][j]=;
}
}
//这个是长度
//printf("%d\n",dp[len1][len2]);
//这个是LCS序列
pr(len1,len2);
puts("");
}
return ;
}

HDU 1159 Common Subsequence --- DP入门之最长公共子序列的更多相关文章

  1. HDU 1159 Common Subsequence:LCS(最长公共子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 题意: 求最长公共子序列. 题解: (LCS模板题) 表示状态: dp[i][j] = max ...

  2. HDU 1159 Common Subsequence (动态规划、最长公共子序列)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  3. HDU 1159 Common Subsequence

    HDU 1159 题目大意:给定两个字符串,求他们的最长公共子序列的长度 解题思路:设字符串 a = "a0,a1,a2,a3...am-1"(长度为m), b = "b ...

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

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

  5. hdu 1159:Common Subsequence(动态规划)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

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

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

  7. hdu 1159 Common Subsequence 【LCS 基础入门】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1159 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  8. HDU 1159 Common Subsequence 公共子序列 DP 水题重温

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

  9. HDU 1159 Common Subsequence (dp)

    题目链接 Problem Description A subsequence of a given sequence is the given sequence with some elements ...

随机推荐

  1. ios如何普安短图片类型

    很多时候需要知道服务器返回的图片是.png还是.jpg或者是.git, 两种方式 1,获取扩展名 //图片    NSString *image = @"4351141241.GIT&quo ...

  2. PHP基础 之 基本数据类型练习

    <h3>PHP基础练习</h3> <?php echo "<h4>常量</h4>"; //定义:一般大写,使用下划线间隔 de ...

  3. 采用Atlas+Keepalived实现MySQL读写分离、读负载均衡【转载】

      文章 原始出处 :http://sofar.blog.51cto.com/353572/1601552 ============================================== ...

  4. Linux使用手册-vi使用手册

    vi使用手册 VI是unix上最常用的文本编辑工具,作为unix软件测试人员,有必要熟练掌握它. 进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filen ...

  5. gulp学习笔记2-安装

    安装nodejs -> 全局安装gulp -> 项目安装gulp以及gulp插件 -> 配置gulpfile.js -> 运行任务 1.去nodejs官网安装nodejs 2. ...

  6. BZOJ 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘

    Description 求凸包周长. Sol 凸包+计算几何. 这好像叫什么 Graham Scan 算法... 这个可以求凸包的周长,直径,面积. 选择一个基点,然后按极角排序,最后用一个栈一直维护 ...

  7. js之词法分析

    词法分析 词法分析: 先分析参数: 再分析变量声明: 分析函数声明: 一个函数能使用的局部变量,就从上面的3步分析而来 具体步骤: 1.函数运行前的一瞬间,生成 Active Object(活动对象) ...

  8. Genymotion自动化启动

      一.启动方式 命令行: player.exe --vm-name [模拟器名称]   例子: "D:\Program files\Genymobile\Genymotion\player ...

  9. EXTJS 6 必填项加星号*

    /**重写ext filed组件, 实现表单必填项加红色*星号**/ Ext.override(Ext.form.field.Base,{ initComponent:function(){ if(t ...

  10. ubuntu14.04安装django

    1) sudo apt-get install python-pip#安装pip 2) pip install Django==1.8.1