본문 바로가기

알고리즘/DP9

팬린드롬 파티-션 팬린드롬 파티-션 백준 2705번 문제https://www.acmicpc.net/problem/2705   1. 문제   2. 풀이2.1 아이디어임의의 수 n(n > 0을 만족하는 정수)을  a0 + x0 + a0 의 파티션으로 표현할 수 있다고 하자.a0을 파티션으로 만들었을 때 a0 + x0 + a0가 재귀적 팰린드롬 파티션이 되려면 a0의 파티션이 재귀적 파티션이면 된다. [재귀적 팰린드롬 파티션 예시 그_1] 임의의 수 n의 재귀적 팰린드롬 파티션의 개수를 D(n)이라고 하자.임의의 수 n을 a0 + x0 + a0의 파티션 으로 표현하는 방법은 [n/2] 이다.([]는 가우스 기호를 의미) [재귀적 팰린드롬 파티션 예시 그_2] [재귀적 팰린드롬 파티션 예시 그_3] a0 + x0 + a0의 재귀.. 2024. 7. 22.
LCS LCS 백준 9251번 문제 https://www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net 1. 문제 2. 풀이 방법 2.1 dp 이 문제는 dp를 사용해서 풀 수 있다. 다만 주어지는 문자열이 2개이기 때문에 2개의 변수를 사용해서 점화식을 만들어야 한다. d[i][j]를 문자열_1의 i번째와 문자열_2의 j번째까지의 LCS라고 하자. 그러면 d 행렬의 가장 오른쪽 아래있는 값이 이 문제의 답이 될 것이다. 예시.. 2023. 6. 4.
가장 긴 증가하는 부분 수열 가장 긴 증가하는 부분 수열 백준 11053번 문제 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 1. 문제 2. 풀이 2.1 풀이 방법 주어진 수열에서 길이 1부터 N까지 끝의 수가 n일 때, 가장 긴 증가하는 부분 수열을 구한다고 해보자. 즉, d[N] = N길이의 수열에서 마지막 값이 n일 때 가장 긴 증가하는 부분 수열 이된다. ※ 부분수열을 구하는 것이기 .. 2023. 1. 16.
내리막-길 내리막-길 백준 1520번 문제 https://www.acmicpc.net/problem/1520 1520번: 내리막 길 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으 www.acmicpc.net 1. 문제 2. 풀이 2.1 풀이 방법 d(i, j) 를 시작점에서부터 i, j로 갈 수 있는 경우의 수를 의미한다고 하자. 그러면 다음과 같은 점화식이 성립한다. d(i, j) = SUM(d(i - 1, j), d(i, j + 1), d(i + 1, j), d(i, j - 1)) (단, (i,j)의 높이보다 높을 경우만 더해준다.) 따라서 도착점을 (i, j)라고 할 .. 2022. 9. 8.