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的长度。

可用滚动数组优化空间复杂度。

下面给出不用和用滚动数组的。

空间未用滚动数组优化版本。。。。

  1. #include<cstdio>
  2. #include<cstring>
  3. const int MAXN=512;
  4. char a[MAXN],b[MAXN];
  5. int dp[MAXN][MAXN];
  6. int main()
  7. {
  8. while(~scanf("%s%s",a+1,b+1))
  9. {
  10. memset(dp,0,sizeof(dp));
  11. int len_a=strlen(a+1);
  12. int len_b=strlen(b+1);
  13. for(int i=1;i<=len_a;i++)
  14. {
  15. for(int j=1;j<=len_b;j++)
  16. {
  17. if(a[i] == b[j])
  18. dp[i][j]= dp[i-1][j-1]+1;
  19. else
  20. dp[i][j]= dp[i][j-1] > dp[i-1][j]? dp[i][j-1] : dp[i-1][j];
  21. }
  22. }
  23. printf("%d\n",dp[len_a][len_b]);
  24. }
  25. }

滚动数组优化空间:

设dp1为前一列,dp2为后面一列。

  1. #include<cstdio>
  2. #include<cstring>
  3. const int MAXN=512;
  4. char a[MAXN],b[MAXN];
  5. int dp1[MAXN],dp2[MAXN];
  6. int main()
  7. {
  8. while(~scanf("%s%s",a+1,b+1))
  9. {
  10. memset(dp1,0,sizeof(dp1));
  11. memset(dp2,0,sizeof(dp2));
  12. int len_a=strlen(a+1);
  13. int len_b=strlen(b+1);
  14. for(int i=1;i<=len_a;i++)
  15. {
  16.  
  17. for(int j=1;j<=len_b;j++)
  18. {
  19. if(a[i] == b[j])
  20. dp2[j]= dp1[j-1]+1;
  21. else
  22. dp2[j]= dp2[j-1] > dp1[j]? dp2[j-1] : dp1[j];
  23. }
  24.  
  25. memcpy(dp1,dp2,sizeof(dp2));
  26.  
  27. }
  28. printf("%d\n",dp1[len_b]);
  29. }
  30. }

POJ 1458 Common Subsequence (zoj 1733 ) LCS的更多相关文章

  1. POJ 1458 Common Subsequence (DP+LCS,最长公共子序列)

    题意:给定两个字符串,让你找出它们之间最长公共子序列(LCS)的长度. 析:很明显是个DP,就是LCS,一点都没变.设两个序列分别为,A1,A2,...和B1,B2..,d(i, j)表示两个字符串L ...

  2. LCS POJ 1458 Common Subsequence

    题目传送门 题意:输出两字符串的最长公共子序列长度 分析:LCS(Longest Common Subsequence)裸题.状态转移方程:dp[i+1][j+1] = dp[i][j] + 1; ( ...

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

    POJ 1458 Common Subsequence(LCS最长公共子序列)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?c ...

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

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

  5. Poj 1458 Common Subsequence(LCS)

    一.Description A subsequence of a given sequence is the given sequence with some elements (possible n ...

  6. (线性dp,LCS) POJ 1458 Common Subsequence

    Common Subsequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65333   Accepted: 27 ...

  7. POJ - 1458 Common Subsequence DP最长公共子序列(LCS)

    Common Subsequence A subsequence of a given sequence is the given sequence with some elements (possi ...

  8. poj 1458 Common Subsequence【LCS】

    Common Subsequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 43132   Accepted: 17 ...

  9. OpenJudge/Poj 1458 Common Subsequence

    1.链接地址: http://poj.org/problem?id=1458 http://bailian.openjudge.cn/practice/1458/ 2.题目: Common Subse ...

随机推荐

  1. centos6.5下 python3.6安装、python3.6虚拟环境

    https://www.cnblogs.com/paladinzxl/p/6919049.html # python3.6的安装 wget https://www.python.org/ftp/pyt ...

  2. 洛谷 P1981 表达式求值

    P1981 表达式求值 题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. 输入输出格式 输入格式: 输入文件为 expr.in. 输入仅有一行,为需要你计算的表达式,表达式中只 ...

  3. HDU1050:Moving Tables

    pid=1050">Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  4. LeetCode OJ Basic Calculator II

    Basic Calculator II 题目 思路 和这个一样:Basic Calculator I 代码 class ExpressionTransformation { public: strin ...

  5. cocos2d-x 一些3效果的类及创建參数

    CCShaky3D::create(时间,晃动网格大小,晃动范围,Z轴是否晃动); //创建一个3D晃动的效果 CCShakyTiles3D::create(时间,晃动网格大小,晃动范围,Z轴是否晃动 ...

  6. node --进行后台的环境搭建

    1.下载winscp  --- 输入IP 端口 账号 密码  进入当前的服务器环境 2.下载xshell5 ---- 输入IP 端口  和 winscp 达成连接. 3.把本地代码放置 winscp远 ...

  7. 33.promise future多线程通信

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <thread> #include <futur ...

  8. 71.sscanf数据挖掘

    数据挖掘 sscanf(str, "%d %s %s %d %d %s %s %s", &ph[i].id, ph[i].name, ph[i].sex, &ph[ ...

  9. LiveReload配置,安装使用方法~~~前端页面神助手

    一.Chrome端安装LiveReload插件 1.首先这里啰嗦一下,如果Chrome无法进入商店,可以先安装一下谷歌商店助手 谷歌商店插件地址 http://pan.baidu.com/s/1dF1 ...

  10. 洛谷 P1755 斐波那契的拆分

    P1755 斐波那契的拆分 题目背景 无 题目描述 已知任意一个正整数都可以拆分为若干个斐波纳契数,现在,让你求出n的拆分方法 输入输出格式 输入格式: 一个数t,表示有t组数据 接下来t行,每行一个 ...