会这个算法发现只需要解决三个问题:
①:什么是子序列?
很多人看不懂的原因都是弄不清楚子序列这个概念,不会说是我自己的 ,其实简单来说就像一个集合里的元素拿出来排,我是这么理解的,但是需要按照顺序。
②得会动态规划?
其实俺觉得可以形象的记忆,只需要一张图就可以了,目标就是想办法把图填满,每一次的比较也很简单,如果相同的话就把轴上最近的值加1,否则取上一个字符a和b串构成最大的值
这里借用一下=。=

③要会阿巴阿巴
贴贴题
#include<bits/stdc++.h>
using namespace std;
int a[1000][1000];
int main()
{
string s1,s2;
while(cin>>s1>>s2){
int n,i,j,t;
memset(a,0,sizeof(a));
int ans=0;
for(i=0;i<s1.length();i++){
for(j=0;j<s2.length();j++){
if(s1[i]==s2[j]){
a[i+1][j+1]=a[i][j]+1;
}
else {
a[i+1][j+1]=max(a[i+1][j],a[i][j+1]);
}
}
}
cout<<a[i][j]<<endl;
}
}
动态规划解决子序列最大长度
博客探讨了如何使用动态规划算法找到两个字符串的最长公共子序列。通过解释子序列的概念,建立动态规划的二维数组,并展示C++实现的代码,博主详细阐述了算法过程。动态规划数组的填充策略是在字符匹配时增加前一状态的计数,否则取最大值,最终输出最大长度。

4240

被折叠的 条评论
为什么被折叠?



