会这个算法发现只需要解决三个问题:
①:什么是子序列?
很多人看不懂的原因都是弄不清楚子序列这个概念,不会说是我自己的 ,其实简单来说就像一个集合里的元素拿出来排,我是这么理解的,但是需要按照顺序。
②得会动态规划?
其实俺觉得可以形象的记忆,只需要一张图就可以了,目标就是想办法把图填满,每一次的比较也很简单,如果相同的话就把轴上最近的值加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;
}
}