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 ...
随机推荐
- centos6.5下 python3.6安装、python3.6虚拟环境
https://www.cnblogs.com/paladinzxl/p/6919049.html # python3.6的安装 wget https://www.python.org/ftp/pyt ...
- 洛谷 P1981 表达式求值
P1981 表达式求值 题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. 输入输出格式 输入格式: 输入文件为 expr.in. 输入仅有一行,为需要你计算的表达式,表达式中只 ...
- HDU1050:Moving Tables
pid=1050">Moving Tables Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- LeetCode OJ Basic Calculator II
Basic Calculator II 题目 思路 和这个一样:Basic Calculator I 代码 class ExpressionTransformation { public: strin ...
- cocos2d-x 一些3效果的类及创建參数
CCShaky3D::create(时间,晃动网格大小,晃动范围,Z轴是否晃动); //创建一个3D晃动的效果 CCShakyTiles3D::create(时间,晃动网格大小,晃动范围,Z轴是否晃动 ...
- node --进行后台的环境搭建
1.下载winscp --- 输入IP 端口 账号 密码 进入当前的服务器环境 2.下载xshell5 ---- 输入IP 端口 和 winscp 达成连接. 3.把本地代码放置 winscp远 ...
- 33.promise future多线程通信
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <thread> #include <futur ...
- 71.sscanf数据挖掘
数据挖掘 sscanf(str, "%d %s %s %d %d %s %s %s", &ph[i].id, ph[i].name, ph[i].sex, &ph[ ...
- LiveReload配置,安装使用方法~~~前端页面神助手
一.Chrome端安装LiveReload插件 1.首先这里啰嗦一下,如果Chrome无法进入商店,可以先安装一下谷歌商店助手 谷歌商店插件地址 http://pan.baidu.com/s/1dF1 ...
- 洛谷 P1755 斐波那契的拆分
P1755 斐波那契的拆分 题目背景 无 题目描述 已知任意一个正整数都可以拆分为若干个斐波纳契数,现在,让你求出n的拆分方法 输入输出格式 输入格式: 一个数t,表示有t组数据 接下来t行,每行一个 ...