문제
풀이
$A[i] = B[j]$일 때 $dp[i][j]$를 두 부분 수열 $A_1, A_2, \dots, A_i$와 $B_1, B_2, \dots, B_j$의 최대 공통 증가 수열의 길이라 합시다.
$k < i$이고 $l < j$이면서 $A[k] = B[l]$을 만족하는 $k$, $l$에 대해 $dp[i][j] = \max(dp[k][l] + 1)$입니다.
이때 $l$은 $A[k] = B[l]$과 $l < j$를 만족하는 최댓값만 고려해도 됩니다.
만약 $l < m$이고 $B[l] < B[m]$인 $m$이 존재하여 이를 고려해야 한다면 $A[k] = B[m]$인 경우에서 고려되기 때문입니다.
따라서 $A[i] = B[j]$인 $j$를 오름차순으로 저장하여 가장 큰 $l$을 이분 탐색으로 구하면 시간 복잡도 $\mathcal{O}(M^3\log M)$에 해결할 수 있습니다.
코드
1 | |