본문 바로가기
백준 문제 해설

9177 단어 섞기(dp, c++)

by toomanysegtrees 2022. 8. 5.

주석처리한 부분 사용했으니 i도 j도 다음으로 넘겨줄 수 있게 되는 것 이다.......

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define pb push_back
#define ff first
#define ss second
#define fast_io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
int dp[210][210];
string s1, s2, s3;
int main(){
fast_io;
int n;
cin>>n;
for(int t=1;t<=n;t++){
memset(dp, 0, sizeof dp);
cout<<"Data set "<<t<<": ";
cin>>s1>>s2>>s3;
int n = s1.size(), m = s2.size();
for(int i=1;i<=n;i++)
if(s1[i-1] == s3[i-1])
dp[i][0] = 1;
for(int i=1;i<=m;i++)
if(s2[i-1] == s3[i-1])
dp[0][i] = 1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char a = s1[i-1], b = s2[j-1], c = s3[i+j-1];
if(a != c && b != c)
dp[i][j] = 0;
else if(a == c && b != c)
dp[i][j] = dp[i-1][j];
else if(a != c && b == c)
dp[i][j] = dp[i][j-1]; // 사용했으니 다음으로 넘겨줄 수 있게 된다
else
dp[i][j] = dp[i][j-1] || dp[i-1][j];
}
}
if(dp[n][m])
cout<<"yes\n";
else
cout<<"no\n";
}
cout<<'\n';
}

 

'백준 문제 해설' 카테고리의 다른 글

17143 낚시왕 (C++)  (1) 2022.10.03
5719 거의 최단 경로 (C++)  (0) 2022.10.02
1043 거짓말 (C++)  (1) 2022.10.01
12880 그래프 차이 최소 (C++)  (2) 2022.09.30
2473 세 용액 (C++)  (2) 2022.09.29
16724 피리 부는 사나이 (C++)  (0) 2022.09.28
3973 Time To Live (c++)  (0) 2022.08.07
백준 13913 메모리초과(c++)  (0) 2022.08.05