蓝肽子序列--字符串+最长子序列的dp
1.字符串根据形式用vector存
2.最长公共子序列的经典dp,字符串99%都得用dp
https://www.dotcpp.com/oj/problem2602.html
#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef long long ll;
typedef pair<int,int> pii;
string a,b;
vector<string> x,y;
int ma;
int dp[1001][1001];
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>a>>b;string w;for(int i=0;i<a.size();i++){if(a[i]>='A'&&a[i]<='Z'){x.push_back(w);w="";w.insert(w.end(),a[i]);}else w.insert(w.end(),a[i]);}x.push_back(w);w="";for(int i=0;i<b.size();i++){if(b[i]>='A'&&b[i]<='Z'){y.push_back(w);w="";w.insert(w.end(),b[i]);}else w.insert(w.end(),b[i]);}y.push_back(w);int n=x.size();int m=y.size();for(int i=1;i<n;i++){for(int j=1;j<m;j++){if(x[i]==y[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]);///不匹配就从前面找 }ma=max(ma,dp[i][j]);///实时更新,维护最大 }}cout<<ma;return 0;
}