다이나믹 프로그래밍

BOJ

[ 백준 1463 ] - 1로 만들기 (Kotlin)

1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 이해 & 기본 개념 아래 3가지 방법을 통해 입력 받은 수를 1로 만드는 것 X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 최소 횟수를 구해야하는 문제 3으로 나누는게 1을 빼는 것보다 수가 훨씬 작아지므로 자칫하면 그리디 문제로 오해할 수 있다. ex) n = 10 10 -> 9 -> 3 -> 1 10 -> 5 -> 4 -> 2 -> 1 이처럼 가능한 큰 수로 나누는 것보다 1을 먼저 빼는 경우가 최소 횟수가 될 수도 있기 때문에 dp를 이용한다. 최종 풀이 파란색이 처음 계산 되는 부분 빨간색이 중복 계산 되는 ..

BOJ

[ 백준 11055 ] - 가장 큰 증가 부분 수열 (Kotlin)

11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수 www.acmicpc.net 문제 이해 & 기본 개념 수열에서 증가하는 부분 (이어질 필요 x)에서 가장 합이 큰 경우를 찾아야하는 문제 중요 포인트 모든 경우의 수를 보는 방법도 있긴 하겠지만, 중복된 연산이 많이 발생 중복된 연산을 줄이기 위해 dp를 사용하면 간단하게 풀 수 있음 최종 풀이 점화식 dp[i] = max(dp[i], dp[j] + a[i]) i는 현재 위치, j는 이전에 선택된 원소의 위치 dp[i]는 i까지의 최..

dongx._.2
'다이나믹 프로그래밍' 태그의 글 목록