666
focus_aurora · · 题解
题目大意
给出两个长度在
题目思路
显然,这是一道 LCS 变种问题( 最长不公共子序列 ),我们可以用可爱的 DP 来解决。DP 的三要素是:状态,状态转移方程,初始化。初始化非常简单,为
好了,话不多说,这是一道非常经典的 DP 问题,是最长上升子序列的演化。下面再展示一下代码。
#include<iostream>
#include<cstdio>
using namespace std;
int v[5005][5005],maxx;
int main(){
string a,b;
cin>>a>>b;
for(int i=0;i<a.size();i++){
for(int j=0;j<b.size();j++){
if(a[i]==b[j]){
v[i+1][j+1]=max(v[i+1][j],v[i][j+1]);
}
else{
v[i+1][j+1]=v[i][j]+1;
}
maxx=max(maxx,v[i+1][j+1]);
}
}
cout<<maxx;
return 0;
}