2018. 1. 7. 14:29, 알고리즘/BOJ
https://www.acmicpc.net/problem/2306
D[i][j]를 DNA[i~j] 내의 가장 긴 유전자 길이라고 정의할 때, D[i][j]는 k = i~j에 대해 D[i][k] + D[k+1][j]의 최댓값입니다.(그리고 만약 DNA[i] = a, DNA[j] = t이거나 DNA[i] = g, DNA[j] = c일 경우, D[i+1][j-1]+2도 고려해주어야 합니다.)
이 점화식이 성립하는 이유는, 만약 DNA[i~j] 내의 최대길이 DNA가 여러 조각으로 잘릴 수 있다면 어떤 k =i~j에 의해 D[i][k]+D[k+1][j]의 합으로 D[i][j]를 나타낼 수 있고, 여러 조각으로 잘리지 않는 형태라면 반드시 DNA[i] = a, DNA[j] = t이거나 DNA[i] = g, DNA[j] = c 이기 때문입니다.
테이블을 채우는 방향은 j-i가 커지는 순서로 채우면 됩니다.
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 1006번: 습격자 초라기 (0) | 2018.01.07 |
---|---|
[BOJ] 2261번: 가장 가까운 두 점 (2) | 2018.01.07 |
[BOJ] 2515번: 전시장 (0) | 2018.01.07 |
[BOJ] 2300번: 기지국 (0) | 2018.01.07 |
[BOJ] 2250번: 트리의 높이와 너비 (2) | 2018.01.07 |
[BOJ] 1239번: 차트 (0) | 2018.01.07 |
Comments