动态规划———求两个字符串的最长公共子序列!
2012-08-22 08:05
555 查看
#include<stdio.h> #include<string.h> const int max=120;//字符串大小 char x[max],y[max]; int b[max][max]; int c[max][max]; int m,n; void printstring(int i,int j)//打印最长字串 { if(i==0||j==0) return; if(b[i][j]==1) { printstring(i-1,j-1); printf("%c ",x[i-1]); } else if(b[i][j]==2) printstring(i-1,j); else printstring(i,j-1); } void maxstring()//动态规划求最长字串长度 { int i,j; memset(c,0,sizeof(c)); for(i=1;i<=m;i++) for(j=1;j<=n;j++) if(x[i-1]==y[j-1]) { c[i][j]=c[i-1][j-1]+1; b[i][j]=1; } else if(c[i-1][j]>c[i][j-1]) { c[i][j]=c[i-1][j]; b[i][j]=2; } else { c[i][j]=c[i][j-1]; b[i][j]=3; } printf("%d\n",c[m] ); } int main() { while(scanf("%s%s",x,y)) { m=strlen(x); n=strlen(y); maxstring(); printstring(m,n); printf("\n\n"); } return 0; }
相关文章推荐
- pku2192---Zipper(动态规划题,随机组合两个字符串)
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- 动态规划 CSU - 1060 Nearest Sequence(3个字符串的最长公共子序列)
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- 动态规划(实现最长公共子序列以及最长公共子字符串)
- 动态规划 LCS 求两个序列A,B中全部的最长公共子序列
- 动态规划:给出两个字符串s1和s2,返回其中最大的公共子串
- 转【算法之动态规划(三)】动态规划算法之:最长公共子序列 & 最长公共子串(LCS)&字符串相似度算法
- 动态规划求两个序列的最长公共子序列
- Advanced Fruits(合并字符串+最长公共子序列应用)hdu1503 +动态规划
- 动态规划经典题:给出两个字符串s1和s2,返回其中最大的公共子串
- 动态规划问题 字符串相似度 和字符串最长公共子序列
- hdu1159Common Subsequence(动态规划之最长公共子序列)
- 动态规划---LCS问题 最长公共子序列
- 两个字符串的最长公共子序列(可以不连续)
- 动态规划 ------- 最长公共子序列
- 动态规划解最长公共子序列问题(LCS)C语言加注释
- 动态规划——5 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m
- hdu 1159 Common Subsequence(动态规划:最长公共子序列)