Submission #1010657

#TimeUsernameProblemLanguageResultExecution timeMemory
1010657ivopav원형 문자열 (IZhO13_rowords)C++17
16 / 100
139 ms131072 KiB
#include <bits/stdc++.h> using namespace std; int lcs(string a,string b,int n,int m){ vector<vector<vector<vector<int>>>> dp(n+1,vector<vector<vector<int>>>(m+1,vector<vector<int>>(n*2+1,vector<int>(m*2+1,0)))); int najv=0; for (int i=0;i<n;i++){ for (int j=0;j<m;j++){ for (int k=i;k<i+n;k++){ for (int l=j;l<j+n;l++){ // cout << i << " " << j << " " << k<< " " << l << "\n"; najv=max(najv,dp[i][j][k][l]); if (a[k]==b[l]){ dp[i][j][k+1][l+1]=max(dp[i][j][k+1][l+1],dp[i][j][k][l]+1); najv=max(najv,dp[i][j][k+1][l+1]); } dp[i][j][k+1][l]=max(dp[i][j][k+1][l],dp[i][j][k][l]); dp[i][j][k+1][l+1]=max(dp[i][j][k+1][l+1],dp[i][j][k][l]); dp[i][j][k][l+1]=max(dp[i][j][k][l+1],dp[i][j][k][l]); } } } } return najv; } int main(){ string a; string b; cin >> a >> b; int n=a.size(); int m=b.size(); for (int i=0;i<n;i++){ a.push_back(a[i]); } for (int i=0;i<m;i++){ b.push_back(b[i]); } int rje1=lcs(a,b,n,m); reverse(b.begin(),b.end()); int rje2=lcs(a,b,n,m); // cout << rje1 << " " << rje2 << "\n"; cout << min(min(n,m),max(rje1,rje2)) << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...