POJ 1458 Common Subsequence (zoj 1733 ) LCS
POJ:http://poj.org/problem?id=1458
ZOJ:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=733
HDU: http://acm.hdu.edu.cn/showproblem.php?pid=1159
题目大意:
给定两串子序列,求最长的公共字串(LCS)
设d( i , j)为A和 B的LCS的长度,则当A[i] = B[j]时, d(i , j)= d(i-1, j-1)+1 ; 否则 d (i , j)=max ( d(i - 1 ,j) , d(i , j-1 )},时间复杂度为O(nm),n和m分别为序列A和B的长度。
可用滚动数组优化空间复杂度。
下面给出不用和用滚动数组的。
空间未用滚动数组优化版本。。。。
#include<cstdio>
#include<cstring>
const int MAXN=512;
char a[MAXN],b[MAXN];
int dp[MAXN][MAXN];
int main()
{
while(~scanf("%s%s",a+1,b+1))
{
memset(dp,0,sizeof(dp));
int len_a=strlen(a+1);
int len_b=strlen(b+1);
for(int i=1;i<=len_a;i++)
{
for(int j=1;j<=len_b;j++)
{
if(a[i] == b[j])
dp[i][j]= dp[i-1][j-1]+1;
else
dp[i][j]= dp[i][j-1] > dp[i-1][j]? dp[i][j-1] : dp[i-1][j];
}
}
printf("%d\n",dp[len_a][len_b]);
}
}
滚动数组优化空间:
设dp1为前一列,dp2为后面一列。
#include<cstdio>
#include<cstring>
const int MAXN=512;
char a[MAXN],b[MAXN];
int dp1[MAXN],dp2[MAXN];
int main()
{
while(~scanf("%s%s",a+1,b+1))
{
memset(dp1,0,sizeof(dp1));
memset(dp2,0,sizeof(dp2));
int len_a=strlen(a+1);
int len_b=strlen(b+1);
for(int i=1;i<=len_a;i++)
{ for(int j=1;j<=len_b;j++)
{
if(a[i] == b[j])
dp2[j]= dp1[j-1]+1;
else
dp2[j]= dp2[j-1] > dp1[j]? dp2[j-1] : dp1[j];
} memcpy(dp1,dp2,sizeof(dp2)); }
printf("%d\n",dp1[len_b]);
}
}
POJ 1458 Common Subsequence (zoj 1733 ) LCS的更多相关文章
- POJ 1458 Common Subsequence (DP+LCS,最长公共子序列)
题意:给定两个字符串,让你找出它们之间最长公共子序列(LCS)的长度. 析:很明显是个DP,就是LCS,一点都没变.设两个序列分别为,A1,A2,...和B1,B2..,d(i, j)表示两个字符串L ...
- LCS POJ 1458 Common Subsequence
题目传送门 题意:输出两字符串的最长公共子序列长度 分析:LCS(Longest Common Subsequence)裸题.状态转移方程:dp[i+1][j+1] = dp[i][j] + 1; ( ...
- POJ 1458 Common Subsequence(LCS最长公共子序列)
POJ 1458 Common Subsequence(LCS最长公共子序列)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?c ...
- POJ 1458 Common Subsequence(最长公共子序列LCS)
POJ1458 Common Subsequence(最长公共子序列LCS) http://poj.org/problem?id=1458 题意: 给你两个字符串, 要你求出两个字符串的最长公共子序列 ...
- Poj 1458 Common Subsequence(LCS)
一.Description A subsequence of a given sequence is the given sequence with some elements (possible n ...
- (线性dp,LCS) POJ 1458 Common Subsequence
Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65333 Accepted: 27 ...
- POJ - 1458 Common Subsequence DP最长公共子序列(LCS)
Common Subsequence A subsequence of a given sequence is the given sequence with some elements (possi ...
- poj 1458 Common Subsequence【LCS】
Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 43132 Accepted: 17 ...
- OpenJudge/Poj 1458 Common Subsequence
1.链接地址: http://poj.org/problem?id=1458 http://bailian.openjudge.cn/practice/1458/ 2.题目: Common Subse ...
随机推荐
- 分享一个js加密的几种方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaScript--数据结构与算法之集合
集合(Set):是一种包含不同元素的数据结构. 重要特性:1.集合中的成员时无序的:2.集合中不允许相同的成员存在. 使用场景:用于存储一些独一无二的元素. 1 集合的定义:(和高中数学中的集合一样) ...
- C# 正整数和非零正整数校验
/// <summary> /// 1. 校验正整数(包含0) /// </summary> public static bool isInterger(string str) ...
- Markdown最简单常用的语法
1,文本强调: 文本倾斜,*我是倾斜的文本* 文本加粗,**我是加粗的文本** 文本删除线,~~带删除线的文本~~ 2,链接,分为行内式与参数式,参数式多用于在文章中多次使用相同的链接 行内式写法:[ ...
- 【Henu ACM Round #12 A】 Grandma Laura and Apples
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 知道题意之后就是一个模拟的过程了. 用int now记录当前苹果的个数.bool flag记录是否有小数(即半个苹果) (这样处理为 ...
- 【项目基础】容器、AOP理论篇
一.容器(砂锅) 1.概念: 容器是应用server中位于组件和平台之间的接口集合 2.应用: 容器一般位于应用server之内,由应用server负责载入和维护.一个容器仅仅能存在于一个应用serv ...
- Qt自定义类型使用QHash等算法(Qt已经自定义了34种类型,包括int, QString, QDate等基本数据类型)
自定义类型 #include <QCoreApplication> #include <QSet> #include <QDebug> class testCust ...
- Impala的安装(含使用CM安装 和 手动安装)(图文详解)
Impala有两种安装方式: 1)使用CM安装Impala 2)手动安装Impala 注意:Impala不支持在Debian/Ubuntu, SuSE, RHEL/CentOS 6.5系统中安装. 基 ...
- 新手前端笔记之--css盒子
css盒子就是它的盒模型,所有css的布局都是以此作为基础的,很有必要来详细记录一下. 1.盒子的尺寸就是margin+padding+border+content的总和,这很好理解,但令人迷惑的可能 ...
- 【2017中国大学生程序设计竞赛 - 网络选拔赛】Palindrome Function
[链接]http://acm.hdu.edu.cn/showproblem.php?pid=6156 [题意] 已知函数f(x, k),如果10进制数x在k进制下是个回文数,那么f(x, k)值为k, ...