HDU 1159 Common Subsequence --- DP入门之最长公共子序列
基础的最长公共子序列
#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入门之最长公共子序列的更多相关文章
- HDU 1159 Common Subsequence:LCS(最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 题意: 求最长公共子序列. 题解: (LCS模板题) 表示状态: dp[i][j] = max ...
- HDU 1159 Common Subsequence (动态规划、最长公共子序列)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 1159 Common Subsequence
HDU 1159 题目大意:给定两个字符串,求他们的最长公共子序列的长度 解题思路:设字符串 a = "a0,a1,a2,a3...am-1"(长度为m), b = "b ...
- HDU 1159 Common Subsequence 最长公共子序列
HDU 1159 Common Subsequence 最长公共子序列 题意 给你两个字符串,求出这两个字符串的最长公共子序列,这里的子序列不一定是连续的,只要满足前后关系就可以. 解题思路 这个当然 ...
- hdu 1159:Common Subsequence(动态规划)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu 1159 Common Subsequence(最长公共子序列 DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...
- hdu 1159 Common Subsequence 【LCS 基础入门】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1159 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- HDU 1159 Common Subsequence 公共子序列 DP 水题重温
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...
- HDU 1159 Common Subsequence (dp)
题目链接 Problem Description A subsequence of a given sequence is the given sequence with some elements ...
随机推荐
- [译]在AngularJS中何时应该使用Directives,Controllers或者Service
原文: http://kirkbushell.me/when-to-use-directives-controllers-or-services-in-angular/ Services Servic ...
- Express开发实例(1) —— Hello,world!
Express是NodeJs开发中最常用的基础模块.NodeJs本身有Http模块,但是易用性并不好,因此有人在此基础上开发了Express模块. 什么是express express提供了丰富的路由 ...
- 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX
从网上抓了一些字节流,想打印出来结果发生了一下错误: UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position ...
- Eclipse 自动补全功能失效解决办法及修改快捷键方法
最近在学习Java,前段时间分盘把电脑能坏了,重装系统后发现我的Eclipse的自动补全的功能失效了,那多麻烦呀,什么都得自己打,于是百度后总结了以下解决方法: 1.点击Window-->Pre ...
- Python 集合set添加删除、交集、并集、集合操作符号
在Python中集合set是基本数据类型的一种,它有可变集合(set)和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法. 1. ...
- Java转json
一.json介绍 1. 作用:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. 2.json以key-value的格式书写,数 ...
- error C2504 类的多层继承 头文件包含
error C2504:头文件包含不全 今天碰到了很烦的问题,继承一个类之后,感觉头文件都包含了,可还是出现父类未定义的问题,最后发现,子类的子类在实现时,需要在cpp文件中包含所有他的父类的定义.因 ...
- Android开发App工程结构搭建
本文算是一篇漫谈,谈一谈关于android开发中工程初始化的时候如何在初期我们就能搭建一个好的架构. 关于android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的角 ...
- iOS开发——高级篇——地图 MapKit
一.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如周边:找餐馆.找KTV.找电影院等等导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达 在上述应用中,都用到了定位 ...
- BZOJ4435——[Cerc2015]Juice Junctions
0.题目大意:求两点之间的最小割之和 1.分析:很明显,最小割树,我们发现这个题并不能用n^3的方法来求答案.. 所以我们记录下所有的边,然后把边从大到小排序,然后跑一边类似kruskal的东西,顺便 ...