提交时间:2025-11-26 17:52:24
运行 ID: 38970
#include<bits/stdc++.h> // #define int long long using namespace std; bool ST; const int N=1e3+7,M=1e6+7; int n,m; int A[N],B[M]; int Nxt[M][26]; int Lst[26]; int dp[N][N]; bool ED; signed main(){ cin>>n>>m; for(int i=1;i<=n;i++){char t;cin>>t;A[i]=t-'A';} for(int i=1;i<=m;i++){char t;cin>>t;B[i]=t-'A';} for(int i=0;i<26;i++)Lst[i]=m+1; for(int i=m;i>=0;i--){ for(int j=0;j<26;j++)Nxt[i][j]=Lst[j]; if(i)Lst[B[i]]=i; } memset(dp,0x3f,sizeof(dp)); dp[0][0]=0; for(int i=1;i<=n;i++){ for(int j=0;j<i;j++){ dp[i][j]=min(dp[i][j],dp[i-1][j]); if((dp[i-1][j]<=m)&&(Nxt[dp[i-1][j]][A[i]]<=m)){ dp[i][j+1]=min(dp[i][j+1],Nxt[dp[i-1][j]][A[i]]); } } } // cerr<<abs(&ST-&ED)/1048576.0<<endl; for(int i=n;i>=0;i--){ if(dp[n][i]<=m){ cout<<i<<endl; return 0; } } return 0; }