POJ
来源:互联网 发布:西门子plc300仿真软件 编辑:程序博客网 时间:2024/05/01 22:09
题意
让我们求两个字符串中最长的公共子串是多大
分析
最优化问题
考虑dp
我们看两个字符串如何定义解的结构
假设f(i,j)求出长度为i的串a和长度为j的串b的LCS
两个字符串中的LCS 其实就相当于
判断两个字符串最后的那个字符是否相同
如果相同那么我们就用1+f(lena-1,lenb-1)
如果不同我们就需要取f(lena-1,lenb)和f(lena,lenb-1)中的MAX
所以对于新的f()问题 我们可以递归构建解
可是不如迭代爽!!
所以我们可以尝试迭代搞
其实f(i,j)的结果就是f(i-1,j),f(i,j-1),f(i-1,j-1)组成的
我们不妨把递归改成两层for循环
ij都从1开始枚举
不断判断我们刚才确定的递推关系
code
#include<bits/stdc++.h>using namespace std;int dp[1010][1010];char a[1010],b[1010];int main(){ while(~scanf("%s%s",a+1,b+1)) { int la =strlen(a+1),lb = strlen(b+1); for(int i=1;i<=la;i++){ for(int j=1;j<=lb;j++){ if(a[i]==b[j]) dp[i][j] = max(dp[i][j],dp[i-1][j-1]+1); else dp[i][j] = max(dp[i-1][j],dp[i][j-1]);// cout<<dp[i][j]<<" "; }// cout<<endl; } printf("%d\n",dp[la][lb]); memset(dp,0,sizeof(dp)); }return 0;}
阅读全文
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- 学生成绩
- Windows server上用HammerDB跑MSSQL
- 实验4:栈和队列的基本操作实现及其应用之《顺序队列》
- Java.lang.NotFoundClassException
- 3·RHCSA分区、lvm、swap
- POJ
- 使用vue-manage-system找不到sass依赖的
- python/R 十种机器学习算法
- pip安装报错'not a supported wheel on this platform'
- 数据可视化之美
- C++11新特性之八——函数对象function
- MySQL大数据量分页性能优化
- JAVA课程作业2-生成数独问题
- 4·RHCSA用户账户操作