LCS的动态规划算法
来源:互联网 发布:淘宝客链接怎么做 编辑:程序博客网 时间:2024/05/16 07:37
/*输入:两个字符串输出:最长公共子序列算法思想:动态规划*/#include <iostream>#include <cstring>using namespace std;string x,y; //输入串int c[100][100]; //维护LCS_length的数组int b[100][100]; //用于构造一个最优解int lcs_len(string x,string y){ int m,n,i,j; m=x.length(); n=y.length(); for(i=0;i<=m;i++) c[i][0]=0; for(j=1;j<=n;j++) c[0][j]=0; 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]=0;} //string x 有一个字符的偏移,0表示↖ else if(c[i-1][j]>=c[i][j-1]) {c[i][j]=c[i-1][j];b[i][j]=1;} //1表示↑ else {c[i][j]=c[i][j-1];b[i][j]=-1;} //-1表示← } return c[m][n];}void print_lcs(string x,int b[][100],int i,int j) //构造一个最优解{ if(i==0 || j==0) return; if(b[i][j]==0) { print_lcs(x,b,i-1,j-1); cout <<x[i-1]; //string x 有一个字符的偏移 } else if(b[i][j]==1) print_lcs(x,b,i-1,j); else print_lcs(x,b,i,j-1);}int main(){ int i,j,m,n; cin >>x; cin >>y; m=x.length(); n=y.length(); cout <<lcs_len(x,y) <<endl; print_lcs(x,b,m,n); cout <<endl; for(j=1;j<=n;j++) cout <<" \t" <<y[j-1]; cout <<endl; for(i=1;i<=m;i++) { cout <<x[i-1] <<"\t"; for(j=1;j<=n;j++) cout <<c[i][j] <<"\t"; cout <<endl; } cout <<endl; for(j=0;j<n;j++) cout <<" \t" <<y[j]; cout <<endl; for(i=1;i<=m;i++) { cout <<x[i-1] <<"\t"; //string x 有一个字符的偏移 for(j=1;j<=n;j++) cout <<b[i][j] <<"\t"; cout <<endl; } cout <<endl; return 0;}
0 0
- LCS的动态规划算法
- 最长共同子序列(LCS)的动态规划算法
- 动态规划算法解LCS问题的JS实践
- 动态规划---LCS问题的求解(转载)
- 动态规划:找出所有的LCS
- 二维数组的动态规划与LCS
- 动态规划之LCS
- 动态规划 LCS
- 动态规划中LCS
- 动态规划 LCS,LIS
- 动态规划--LCS
- 动态规划:LCS
- 动态规划--LCS计算
- 动态规划(三.LCS)
- 动态规划-LCS
- 最长公共子序列LCS和最长回文子序列的动态规划算法
- 动态规划实现最长公共子序列(LCS)算法
- 动态规划算法解最长公共子序列LCS问题
- hdu1166
- 原始XML资源
- SharePoint 讨论板常见的代码操作
- ARM过程调用标准---APCS简介
- android应用框架搭建------AppManager
- LCS的动态规划算法
- 很多学ThinkPHP的新手会遇到的问题
- 使用cwRsync实现Windows/Linux间文件同步
- java闭锁
- 设计模式之中介者模式
- 湖南省第六届大学生计算机程序设计竞赛---数字整除
- PPT 一些快捷键
- Selenium2关键话题:弹出框、页面跳转、遍历相同控件、执行JS
- android应用框架搭建------BaseActivity