DP
첫번째 문자열의 i번 문자까지의 문자열과 두번째 문자열의 j번 문자까지의 문자열의 LCS의 길이를 구한다.
dp[i][j]
에 문자열 a
의 i번 문자까지의 문자열과 문자열 b
의 j번 문자까지의 문자열의 LCS의 길이를 저장한다.
가장 끝의 문자만 비교하는 식으로 길이를 구해나갈 수 있다.
dp[i][j] = dp[i-1][j-1]+1
dp[i][j]
는 dp[i][j-1]
과 dp[i-1][j]
중 더 큰 값이 된다.#include<iostream>
#include<string>
using namespace std;
int dp[1001][1001];
int main(){
string a,b;
cin>>a;
cin>>b;
int n=a.length(), m=b.length();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i-1]==b[j-1]){
dp[i][j]=dp[i-1][j-1]+1;
}
else{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
cout<<dp[n][m];
}
[백준] 2565번 전깃줄 (C) (0) | 2020.04.12 |
---|---|
[백준] 11054번 가장 긴 바이토닉 부분 수열 (C) (0) | 2020.04.09 |
[백준] 11053번 가장 긴 증가하는 부분 수열 (C) (0) | 2020.04.06 |
[백준] 2156번 포도주 시식 (C) (0) | 2020.03.30 |
[백준] 10844번 쉬운 계산 수 (C) (0) | 2020.03.30 |