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