最长公共子序列-动态规划-openjudge
来源:互联网 发布:中南林业科技大学知乎 编辑:程序博客网 时间:2024/05/25 12:21
序列str1和序列str2
长度分别为m和n;
创建1个二维数组str[m][n]来保存结果,并初始化为0;
如果str1[m] != str2[n],则L[m,n] = max{L[m,n - 1],L[m - 1, n]}
长度分别为m和n;
创建1个二维数组str[m][n]来保存结果,并初始化为0;
m和n分别从0开始,m++,n++循环:
(默认字符串均不为空)
如果str1[m] == str2[n],则L[m,n] = L[m - 1, n -1] + 1;如果str1[m] != str2[n],则L[m,n] = max{L[m,n - 1],L[m - 1, n]}
最后从L[m,n]中的数字一定是最大的,且这个数字就是最长公共子序列的长度
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int main(){ char str1[205]; char str2[205]; int str[205][205]; while(scanf("%s%s",str1+1,str2+1)!=EOF) { int length1=strlen(str1+1); int length2=strlen(str2+1); memset(str,0,sizeof(str)); for(int i=1; i<=length1; i++) { for(int j=1; j<=length2; j++) { if(str1[i]==str2[j]) str[i][j]=str[i-1][j-1]+1; else str[i][j]=max(str[i-1][j],str[i][j-1]); } } printf("%d\n",str[length1][length2]); } return 0;}
0 0
- 最长公共子序列-动态规划-openjudge
- 最长公共子序列&&最长公共子串---[动态规划]
- 动态规划-最长公共子序列、最长公共子串
- 动态规划之最长公共子序列
- 动态规划 ------- 最长公共子序列
- 动态规划实现最长公共子序列
- 【动态规划】最长公共子序列LCS
- 动态规划--最长公共子序列
- 动态规划:最长公共子序列
- 动态规划解决最长公共子序列
- 最长公共子序列-动态规划DP
- 动态规划--最长公共子序列
- 最长公共子序列(动态规划)
- 动态规划解决最长公共子序列
- 最长公共子序列(动态规划)
- 动态规划 最长公共子序列
- 动态规划 - 最长公共子序列
- 动态规划之最长公共子序列
- PAT (Basic Level) Practise (中文)---1002 写出这个数 (20)
- B1025. 反转链表 (25)
- C/C++不常见函数总结
- 计算字符串中含有的某个字符的个数
- 2017.3.18 NOIP训练赛赛后总结
- 最长公共子序列-动态规划-openjudge
- 2017洛谷3月丧病月赛思考记录
- 动态规划求最大子数组的和
- 求解最大公因数
- 程序员三十岁之后要考虑什么?
- 剑指offer-求1+2+3+..n的和
- play-1.4.2 installation
- Lisp em SCU
- android引入百度地图之最简单的例子-HelloBaiDuMap