51NOD 1006 最长公共子序列 动态规划
来源:互联网 发布:软件测试平台 编辑:程序博客网 时间:2024/06/14 19:35
题目描述:
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
比如两个串为:
abcicba
abdkscab
ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
Input
第1行:字符串A
第2行:字符串B
(A,B的长度 <= 1000)
Output
输出最长的子序列,如果有多个,随意输出1个。
Input示例
abcicbaabdkscab
Output示例
abca
题目分析:
LCS最长公共子序列。
动态规划的入门题目。
代码如下:
#include <iostream>#include <cstring>#include <cstdio>using namespace std;int dp[1001][1001];char X[1001];char Y[1001];int i, j;int main(){ cin.getline(X,1001); cin.getline(Y,1001); int xlen = strlen(X); int ylen = strlen(Y); for(i = 1; i <= xlen; ++i) { for(j = 1; j <= ylen; ++j) { if(X[i-1] == Y[j-1]) { dp[i][j] = dp[i-1][j-1] + 1; } else if(dp[i][j-1] > dp[i-1][j]) { dp[i][j] = dp[i][j-1]; } else { dp[i][j] = dp[i-1][j]; } } } i = xlen; j = ylen; int k = dp[i][j]; char lcs[1001] = {'\0'}; while(i && j) { if(X[i-1] == Y[j-1] && dp[i][j] == dp[i-1][j-1] + 1) { lcs[--k] = X[i-1]; i--; j--; } else if(X[i-1] != Y[j-1] && dp[i-1][j] > dp[i][j-1]) i--; else j--; } printf("%s\n",lcs);}
1 0
- 51NOD 1006 最长公共子序列 动态规划
- 51nod动态规划入门--最长公共子序列
- 51nod--1006 最长公共子序列Lcs (动态规划)
- 51Nod- 1006 最长公共子序列Lcs(动态规划)
- Nod-最长公共子序列Lcs(动态规划)
- 51nod1006---最长公共子序列Lcs(51nod基础:动态规划)
- lcs最长公共子序列问题记录路径 动态规划dp 51nod教程
- 【51nod 教程】最长公共子序列问题(动态规划)
- 最长公共子序列&&最长公共子串---[动态规划]
- 动态规划-最长公共子序列、最长公共子串
- 动态规划之最长公共子序列
- 动态规划 ------- 最长公共子序列
- 动态规划实现最长公共子序列
- 【动态规划】最长公共子序列LCS
- 动态规划--最长公共子序列
- 动态规划:最长公共子序列
- 动态规划解决最长公共子序列
- 最长公共子序列-动态规划DP
- 【Java上位机】(一)串口通信
- lcd fb参数如何计算
- 常量指针与指针常量的区别
- Caffe抽取图像特征
- SQLServer BCP 导入导出数据
- 51NOD 1006 最长公共子序列 动态规划
- 八月份考题
- POJ 1947
- 温故知新(七):面向对象(一)
- 文章标题 HDU 1445 : Ride to School (贪心)
- 对于js原型和原型链继承的简单理解(第一种,原型链继承)
- 从二项分布到泊松分布再到正态分布
- pageContext.request.contextPath的意思
- 常用的文件系统操作命令--目录命令