最长公共子序列-动态规划-openjudge

简介: 最长公共子序列-动态规划-openjudge

 序列str1和序列str2

长度分别为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]中的数字一定是最大的,且这个数字就是最长公共子序列的长度

1. #include<stdio.h>
2. #include<string.h>
3. #include<algorithm>
4. using namespace std;
5. int main()
6. {
7. char str1[205];
8. char str2[205];
9. int str[205][205];
10. while(scanf("%s%s",str1+1,str2+1)!=EOF)
11.     {
12. int length1=strlen(str1+1);
13. int length2=strlen(str2+1);
14. memset(str,0,sizeof(str));
15. for(int i=1; i<=length1; i++)
16.         {
17. for(int j=1; j<=length2; j++)
18.             {
19. if(str1[i]==str2[j])
20.                     str[i][j]=str[i-1][j-1]+1;
21. else
22.                     str[i][j]=max(str[i-1][j],str[i][j-1]);
23.             }
24.         }
25. printf("%d\n",str[length1][length2]);
26.     }
27. return 0;
28. }

相关文章
【动态规划刷题 15】最长定差子序列&& 最长的斐波那契子序列的长度
【动态规划刷题 15】最长定差子序列&& 最长的斐波那契子序列的长度
|
3月前
|
算法
动态规划算法学习二:最长公共子序列
这篇文章介绍了如何使用动态规划算法解决最长公共子序列(LCS)问题,包括问题描述、最优子结构性质、状态表示、状态递归方程、计算最优值的方法,以及具体的代码实现。
194 0
动态规划算法学习二:最长公共子序列
|
算法 JavaScript Go
【动态规划】最长递增子序列
【动态规划】最长递增子序列
|
算法
【学会动态规划】 最长递增子序列(26)
【学会动态规划】 最长递增子序列(26)
49 0
深入理解动态规划算法 - 最长公共子序列
深入理解动态规划算法 - 最长公共子序列
82 0
力扣1143. 最长公共子序列 动态规划之最长公共子序列
力扣1143. 最长公共子序列 动态规划之最长公共子序列
202 0
力扣1143. 最长公共子序列 动态规划之最长公共子序列
|
存储 人工智能 算法
『动态规划』最长上升子序列
输入母串的长度 循环输入母串数组以及母串的状态数组并初始化 外层循环,从左往右遍历,记录待更新数组为a[i] 里层循环,遍历母串的左闭右开区间[0,i),找到比a[i]小且状态值最大的数,更新a[i]的状态数组b[i] 用一个变量max记录状态数组b[i]的最大值就是最大子序列的数量
152 0
LeetCode 动态规划之最长公共子序列
LeetCode 动态规划之最长公共子序列
144 0
LeetCode 动态规划之最长公共子序列
【Leetcode】最长定差子序列——动态规划
给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于difference 。