动态规划--(最长公共子序列 poj1458)
来源:互联网 发布:mac chrome 书签位置 编辑:程序博客网 时间:2024/06/05 02:51
给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致。
Sample Input
abcfbc abfcab
programming contest
abcd mnp
Sample Output
4
2
0
#include <iostream>#include<cstring>#define NUM 1001using namespace std;char A[NUM];char B[NUM];int result[NUM][NUM]; //递归方法int Maxlen(int n,int m){ if(n<0||m<0) return 0; if(n==0&&m==0&&A[0]==B[0]) return 1; //各种边界条件的计算; if(n==0&&m==0) return 0; if(result[n][m]> 0) return result[n][m]; if(A[n]==B[m]){ result[n][m]= Maxlen(n-1, m-1)+1;//如果上下相等;;就将个数加1; } else{ int y = Maxlen(n-1, m);//如果,上下不相等,就将上或者是下移动一个,移动以后如果有相等的就将相等的个数数出来, int z = Maxlen(n, m-1);//观察两个的个数哪一个大,用那一个; result[n][m] = max(y, z); } return result[n][m];}int main2(){ int N = 0,M = 0; while(cin>>A>>B){ N = (int)strlen(A); M = (int)strlen(B); for(int i = 0;i<NUM;i++){ for(int j = 0;j<NUM;j++) result[i][j] = -1; }//储存结果数组; cout <<Maxlen(N-1, M-1)<<endl; for(int i = 0;i<NUM;i++){ for(int j = 0;j<M;j++) cout <<result[i][j]<<" "; cout <<endl; } } return 0;} //递推方法int main(){ char a[100]; char b[100]; int result[2][100];//表示计算到我这儿的时候最大的子序列是多少;;; int N; cin>>N; cin>>a>>b; while(N--){ int n = (int)strlen(a); int m = (int)strlen(b); result[1][0] = 0; for( int j = 0;j <= m; j ++ ) result[0][j] = 0; //初始化;;;;很重要;;;; for( int i = 1;i<=n;i++){ for(int j = 1;j<=m;j++){ if(a[i-1] == b[j-1]){//做判断;; result[i%2][j] = result[(i-1)%2][j-1]+1; } else{ result[i%2][j] = max(result[(i-1)%2][j],result[i%2][j-1]); } }// for(int i = 0;i<=1;i++){// for(int j = 0;j<=m;j++)// cout <<result[i][j]<<" ";// cout <<endl;// }//测试 } cout<<result[1][m]<<endl; } return 0;}
阅读全文
0 0
- 动态规划--(最长公共子序列 poj1458)
- POJ1458动态规划——最长公共子序列
- [PKU暑课笔记] 动态规划(二) 最长上升子序列 POJ1458最长公共子序列
- POJ1458(最长公共子序列)
- 最长公共子序列(poj1458)
- poj1458(最长公共子序列dp)
- POJ1458(最长公共子序列)
- poj1458(最长公共子序列问题)
- POJ1458(最长公共子序列)
- POJ1458最长公共子序列
- 最长公共子序列 poj1458
- 最长公共子序列 poj1458
- 最长公共子序列 poj1458
- poj1458最长公共子序列
- poj1458最长公共子序列
- POJ1458【最长公共子序列】
- POJ1458 最长公共子序列
- 最长公共子序列poj1458
- Java JSON解析
- ORB_SLAM2再学习——单目
- ivado HLS和OpenCV
- JavaScript-day17-个人学习笔记
- pycharm当中,如何导入python2或者python3环境
- 动态规划--(最长公共子序列 poj1458)
- NYOJ 1170 最大的数 贪心
- HDOJ 1262 寻找素数对
- GridBagConstraints参数详解
- 快速了解ES6/ES2015
- ES教程
- windows 重装系统后必装的软件(根据个人使用情况整理,欢迎读者在评论推荐其他好用的软件)
- Java Web开发(ER模型/DAO/JDBC/Tomcat中间件/JSP)
- Android Picasso的基本使用