https://codeforces.com/contest/1303/problem/E


이 코드에서 dp[i][j]의 의미가 뭐임?


https://codeforces.com/contest/1303/submission/72022240


#include
using namespace std;
const int N=410;
int dp[N][N];
void solve()
{
string a,b;
cin>>a>>b;
int n=a.length(),m=b.length();
for(int z=0;z<m;z++)
{
memset(dp,-1,sizeof dp),dp[0][0]=0;
for(int i=0;i<n;i++)
for(int j=0;j<=z;j++)
{
if(dp[i][j]==-1)
continue;
dp[i+1][j]=max(dp[i+1][j],dp[i][j]+(dp[i][j]<m-z&&a[i]==b[dp[i][j]+z]));
if(j<z&&a[i]==b[j])
dp[i+1][j+1]=max(dp[i][j],dp[i+1][j+1]);
}
if(dp[n][z]==m-z)
{
puts("YES");
return;
}
}
puts("NO");
return ;
}
int main()
{
int T;
cin>>T;
while(T--)
solve();
}