最长公共子序列【ccf中学计算机程序设计 基础篇】
2017-07-17 09:53
204 查看
#include<cmath> #include<iostream> #include<limits.h> #include<ctime> using namespace std; string s,t; int dp[100][100]={0}; int dfs(int si,int ti) { if(dp[si][ti]!=0) { return dp[si][ti]; } int ans=0; if(si==0) { for(int i=0;i<=ti;i++) { if(s[si]==t[i]) { dp[si][ti]=1; return 1; } } } if(ti==0) { for(int i=0;i<=si;i++) { if(s[i]==t[ti]) { dp[si][ti]=1; return 1; } } } // if(ti==0&&si==0) // { // if(s[si]==t[ti]) // { // return 1; // } // } if(s[si]!=t[ti]) { for(int i=0;i<=ti-1;i++) { int temp=dfs(si,i); ans=max(ans,temp); } for(int i=0;i<=si-1;i++) { int temp=dfs(i,ti); ans=max(ans,temp); } } if(s[si]==t[ti]) { int temp=dfs(si-1,ti-1)+1; ans=max(ans,temp); } //cout<<si<<" "<<ti<<" "<<ans<<endl; dp[si][ti]=ans; return ans; } int main() { //cin>>s>>t; s="bbabxbcfsdfdfdaffsfgggsggsdgdsfgdfgdfgsfdgdfsgdafdsafdaf"; t="batxbbcasfsdafgsdfgdsfgdfgerulopjuiyoizsdfasfafaeaergdfadfsafsdaf"; cout<<dfs(s.size()-1,t.size()-1)<<endl; cout<<(double)clock()/CLOCKS_PER_SEC; return 0; }
相关文章推荐
- 最长不下降子序列【ccf中学计算机程序设计 基础篇】
- java程序设计基础篇 复习笔记 第六单元
- 多连块拼图 (湖南省第七届大学生计算机程序设计竞赛真题) (平移+模拟匹配)
- 湖南省第十届大学生计算机程序设计竞赛1503: 点到圆弧的距离(atan()函数的应用)
- CSU 1115 湖南省第八届大学生计算机程序设计竞赛 (最短的名字[字典树])
- 【JAVA语言程序设计基础篇】--图形用户界面基础--练习
- java基础篇---网络编程(TCP程序设计)
- 湖南师范大学第四届大学生计算机程序设计竞赛练习
- 2015关于第十一届"蓝狐网络杯"湖南省大学生计算机程序设计竞赛的总结
- 【JAVA语言程序设计基础篇】--图形--使用FontMetrics类居中显示字符串
- 湖南省第八届大学生计算机程序设计竞赛D题 平方根大搜索
- C#WinForm中实现基于角色的权限菜单--C#-程序设计-计算机学习网-育龙网
- 湖南省第八届大学生计算机程序设计竞赛CSU--最短的名字
- 计算机程序设计课程教学之我见
- 2016年湖南省第十二届大学生计算机程序设计竞赛 A. 2016(数学)
- 湖南省第十二届大学生计算机程序设计竞赛 G Parenthesis
- 2016年湖南省第十二届大学生计算机程序设计竞赛
- 【最短路】【STL】CSU 1808 地铁 (2016湖南省第十二届大学生计算机程序设计竞赛)
- 2016年湖南省第十二届大学生计算机程序设计竞赛(重现)
- 计算机程序设计课程教学之我见