SlideShare a Scribd company logo
동적계획법 응용 및 연습(1)
2016. 4. 1
장 홍 준
Dynamic Programming
• Wikipedia
: method for solving complex problems by breaking them down into simpler subproblems
1. 부분 문제의 정의(Defining subproblems)
2. 부분 문제 간의 점화 관계 유추(Finding recurrences)
3. 초기 상태 및 특수 경우 명세(Solving the base cases)
Simple Problems
• 부분합 : S(n) = A(n) + S(n-1)
• 피보나치 수열 : F(n) = F(n-1) + F(n-2)
• n 종류의 X_i원의 동전들이 무한히 많을 때, K원을 만들기.
: For (D(0) = 1, a = 1 to n) { //a : 어느 종류의 동전
for (b = X_a to K) D(b) += D(b – X_a); //b원을 만들기 위해
}
BOJ 1405 (미친 로봇)
• 4방향(동서남북), N번 움직임.
• 로봇이 같은 곳을 다시 방문하지 않을 때, 로봇의 이동 경로가 ‘단순’하다. (로봇이 시작하
는 위치가 처음 방문한 곳이다.)
• 로봇의 이동 경로가 단순할 확률을 구하기.
• 예를 들어, EENE와 ENW는 단순하지만, ENWS와 WWWWSNE는 단순하지 않다. (E는 동,
W는 서, N은 북, S는 남)
BOJ 1405 (미친 로봇)
• 부분 문제의 정의.
• N번 움직였다면, (N-1)번까지 움직였을 때의 정보를 이용하면…
• 로봇의 이동경로가 단순하다는 조건을 매번 지켜주면 마지막 위치만이 중요!
• (N-1)번까지 움직였을 때의 최종 위치…
• D(X, Y, K)를 로봇이 K번 더 움직일 수 있고, 현재 위치가 (X, Y)라고 정의.
• D(X, Y, K) = Sum( D(X2, Y2, K-1) * possibility(direction) )
• N 제한이 14이하.
• 경우의 수가 적어서 recursion 관계만 찾아도 충분!...
BOJ 1750 (서로소의 개수)
input : 수열의 크기가 N인 수열.
한 개 이상의 수를 선택했을 때에, 선택한 수들의 GCD가 1이 되는 것의 개수.
1 ≤ N ≤ 100, 1 ≤ Si ≤ 100,000
BOJ 1750 (서로소의 개수)
1. GCD 연산은 순서에 상관없이 결과가 같다. Ex) GCD(4, 6, 12) = GCD(12, 6, 4)
2. 수열의 K번째 수까지에 대한 답을 구했다면, K+1번째에서는 이전에 계산한 정보를 활용할 수 없을까.
3. 어떤 수들을 골랐을 때에 그 집합을 독립적으로 생각할 수 있는 기준 : 최대공약수
4. D(index, gcd_number)
: 수열의 index번째 수까지 고려했을 때에, 1개 이상의 수를 골라서 그 수들의 최대공약수가 gcd_number일 경우의 수
BOJ 1750 (서로소의 개수)
D(index-1, 0) ~ D(index-1, max(S_i))까지 계산했다고 가정.
S_index = X라 하자.
1) gcd_number != X
D(index, GCD(gcd_number, X)) += D(index-1, gcd_number)
D(index, gcd_number) += D(index-1, gcd_number)
2) gcd_number == X
D(index, X) += D(index-1, X)*2(X를 기존의 집합에 추가하고/안하고) + 1(X 혼자)
BOJ 11053 (가장 긴 증가하는 부분 수열)
• Longest Increasing Subsequence
• D(i) : i번째 수에서 끝이 날 때에, 가장 긴 부분 수열의 길이
• D(i) = max( D(j) + 1 ) … if)A(j) < A(i)
Bitmask DP
• Status : 2진수로 표현.
• 1<<k : k번째 사건에 해당하는 비트.
• X & Y : X와 Y의 공통된 상태.
• X ^ Y : X와 Y의 서로 다른 상태.
• X | Y : X에서 벌어진 사건들과 Y에서 벌어진 사건들의 합.
• Define Tables like D(Status, … )…
BOJ 1657 (두부장수 장홍준)
BOJ 1693 (트리 색칠하기)
• n개의 정점으로 이루어진 트리가 있다. 이 트리의 각 정점을 색칠하려고 한다.
• 색칠을 할 때에는 1, 2, 3, …, n번 색깔 중에 하나로 색칠하여야 한다. 각 색깔을 사용하여
한 개의 정점을 색칠할 때마다 1, 2, …, n의 비용이 든다. 즉, i번 색깔로 한 개의 정점을 색
칠하면 i만큼의 비용이 든다는 것이다. 또한 정점에 색칠을 할 때에, 주어진 트리 상에서
인접해 있는 서로 다른 두 정점은 서로 다른 색깔로 칠해져야 한다.
• 이를 만족하면서, 전체 정점들을 색칠하는데 드는 총 비용을 최소화 하려 한다. 최소 비용
을 계산하는 프로그램을 작성하시오.
BOJ 1693 (트리 색칠하기)
BOJ 1693 (트리 색칠하기)
BOJ 1693 (트리 색칠하기)
• D(a, Status) : 노드 a에 Status라는 색을 칠할 때에 필요한 최소 비용.
결론
• Wikipedia
: method for solving complex problems by breaking them down into simpler subproblems
1. 부분 문제의 정의(Defining subproblems)
2. 부분 문제 간의 점화 관계 유추(Finding recurrences)
3. 초기 상태 및 특수 경우 명세(Solving the base cases)
참고 자료
• http://acmicpc.net
• http://web.stanford.edu/class/cs97si/04-dynamic-
programming.pdf

More Related Content

PPTX
Sqrt decomposition
PDF
[D2CAMPUS] Algorithm tips - ALGOS
PDF
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
PDF
2021 여름방학 정기 세미나 3주차
PDF
2021 1학기 정기 세미나 6주차
PDF
정보과학회 FTL논문 아이디어
PPTX
Graph coloring
PDF
2017 cupc solution
Sqrt decomposition
[D2CAMPUS] Algorithm tips - ALGOS
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
2021 여름방학 정기 세미나 3주차
2021 1학기 정기 세미나 6주차
정보과학회 FTL논문 아이디어
Graph coloring
2017 cupc solution

What's hot (18)

PDF
Week9 quicksort
PPT
이산수학[1].110707.l01.행렬
PDF
Flow based generative models
PPTX
Efficient linear skyline algorithm in two dimensional space
PDF
Gmm to vgmm
PDF
2021 2학기 정기 세미나 4주차
PDF
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
PDF
알고리즘 스터디(정렬) Seungdols
PPTX
이항계수
PPT
Data Structure 2
PDF
이산치3보고서
PPTX
그래프의 최단 경로 찾기
PDF
Transliteration English to Korean
PPTX
The Art of Computer Programming 2.3.2 Tree
PDF
Graph mst
PPT
GameMath-Chapter 09 가시성판단
PDF
데이터베이스 시스템 chapter3_STG박하은
PDF
Ds4 artist week_13
Week9 quicksort
이산수학[1].110707.l01.행렬
Flow based generative models
Efficient linear skyline algorithm in two dimensional space
Gmm to vgmm
2021 2학기 정기 세미나 4주차
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
알고리즘 스터디(정렬) Seungdols
이항계수
Data Structure 2
이산치3보고서
그래프의 최단 경로 찾기
Transliteration English to Korean
The Art of Computer Programming 2.3.2 Tree
Graph mst
GameMath-Chapter 09 가시성판단
데이터베이스 시스템 chapter3_STG박하은
Ds4 artist week_13
Ad

Viewers also liked (7)

PDF
Baekjoon Online Judge 1492번 풀이
PDF
COCI 2006/2007 contest #1 solution
PPTX
PPTX
PPTX
PPTX
PDF
2016 FunctionCup 풀이
Baekjoon Online Judge 1492번 풀이
COCI 2006/2007 contest #1 solution
2016 FunctionCup 풀이
Ad

More from Hongjun Jang (9)

PDF
Teamwork in programming contests
PDF
ALPS & AlKor Intro Slides
PDF
Problem Solving GuideBook
PDF
Network flow
PPTX
3. basic data structures(2)
PPTX
1. alps c c++
PPTX
2. basic data structures(1)
PPTX
2016 고려대학교 신입생 프로그래밍 경시대회 해법
PDF
Aho-Corasick Algorithm(아호 코라식 알고리즘)
Teamwork in programming contests
ALPS & AlKor Intro Slides
Problem Solving GuideBook
Network flow
3. basic data structures(2)
1. alps c c++
2. basic data structures(1)
2016 고려대학교 신입생 프로그래밍 경시대회 해법
Aho-Corasick Algorithm(아호 코라식 알고리즘)

4. dynamic programming(1)

  • 1. 동적계획법 응용 및 연습(1) 2016. 4. 1 장 홍 준
  • 2. Dynamic Programming • Wikipedia : method for solving complex problems by breaking them down into simpler subproblems 1. 부분 문제의 정의(Defining subproblems) 2. 부분 문제 간의 점화 관계 유추(Finding recurrences) 3. 초기 상태 및 특수 경우 명세(Solving the base cases)
  • 3. Simple Problems • 부분합 : S(n) = A(n) + S(n-1) • 피보나치 수열 : F(n) = F(n-1) + F(n-2) • n 종류의 X_i원의 동전들이 무한히 많을 때, K원을 만들기. : For (D(0) = 1, a = 1 to n) { //a : 어느 종류의 동전 for (b = X_a to K) D(b) += D(b – X_a); //b원을 만들기 위해 }
  • 4. BOJ 1405 (미친 로봇) • 4방향(동서남북), N번 움직임. • 로봇이 같은 곳을 다시 방문하지 않을 때, 로봇의 이동 경로가 ‘단순’하다. (로봇이 시작하 는 위치가 처음 방문한 곳이다.) • 로봇의 이동 경로가 단순할 확률을 구하기. • 예를 들어, EENE와 ENW는 단순하지만, ENWS와 WWWWSNE는 단순하지 않다. (E는 동, W는 서, N은 북, S는 남)
  • 5. BOJ 1405 (미친 로봇) • 부분 문제의 정의. • N번 움직였다면, (N-1)번까지 움직였을 때의 정보를 이용하면… • 로봇의 이동경로가 단순하다는 조건을 매번 지켜주면 마지막 위치만이 중요! • (N-1)번까지 움직였을 때의 최종 위치… • D(X, Y, K)를 로봇이 K번 더 움직일 수 있고, 현재 위치가 (X, Y)라고 정의. • D(X, Y, K) = Sum( D(X2, Y2, K-1) * possibility(direction) ) • N 제한이 14이하. • 경우의 수가 적어서 recursion 관계만 찾아도 충분!...
  • 6. BOJ 1750 (서로소의 개수) input : 수열의 크기가 N인 수열. 한 개 이상의 수를 선택했을 때에, 선택한 수들의 GCD가 1이 되는 것의 개수. 1 ≤ N ≤ 100, 1 ≤ Si ≤ 100,000
  • 7. BOJ 1750 (서로소의 개수) 1. GCD 연산은 순서에 상관없이 결과가 같다. Ex) GCD(4, 6, 12) = GCD(12, 6, 4) 2. 수열의 K번째 수까지에 대한 답을 구했다면, K+1번째에서는 이전에 계산한 정보를 활용할 수 없을까. 3. 어떤 수들을 골랐을 때에 그 집합을 독립적으로 생각할 수 있는 기준 : 최대공약수 4. D(index, gcd_number) : 수열의 index번째 수까지 고려했을 때에, 1개 이상의 수를 골라서 그 수들의 최대공약수가 gcd_number일 경우의 수
  • 8. BOJ 1750 (서로소의 개수) D(index-1, 0) ~ D(index-1, max(S_i))까지 계산했다고 가정. S_index = X라 하자. 1) gcd_number != X D(index, GCD(gcd_number, X)) += D(index-1, gcd_number) D(index, gcd_number) += D(index-1, gcd_number) 2) gcd_number == X D(index, X) += D(index-1, X)*2(X를 기존의 집합에 추가하고/안하고) + 1(X 혼자)
  • 9. BOJ 11053 (가장 긴 증가하는 부분 수열) • Longest Increasing Subsequence • D(i) : i번째 수에서 끝이 날 때에, 가장 긴 부분 수열의 길이 • D(i) = max( D(j) + 1 ) … if)A(j) < A(i)
  • 10. Bitmask DP • Status : 2진수로 표현. • 1<<k : k번째 사건에 해당하는 비트. • X & Y : X와 Y의 공통된 상태. • X ^ Y : X와 Y의 서로 다른 상태. • X | Y : X에서 벌어진 사건들과 Y에서 벌어진 사건들의 합. • Define Tables like D(Status, … )…
  • 12. BOJ 1693 (트리 색칠하기) • n개의 정점으로 이루어진 트리가 있다. 이 트리의 각 정점을 색칠하려고 한다. • 색칠을 할 때에는 1, 2, 3, …, n번 색깔 중에 하나로 색칠하여야 한다. 각 색깔을 사용하여 한 개의 정점을 색칠할 때마다 1, 2, …, n의 비용이 든다. 즉, i번 색깔로 한 개의 정점을 색 칠하면 i만큼의 비용이 든다는 것이다. 또한 정점에 색칠을 할 때에, 주어진 트리 상에서 인접해 있는 서로 다른 두 정점은 서로 다른 색깔로 칠해져야 한다. • 이를 만족하면서, 전체 정점들을 색칠하는데 드는 총 비용을 최소화 하려 한다. 최소 비용 을 계산하는 프로그램을 작성하시오.
  • 13. BOJ 1693 (트리 색칠하기)
  • 14. BOJ 1693 (트리 색칠하기)
  • 15. BOJ 1693 (트리 색칠하기) • D(a, Status) : 노드 a에 Status라는 색을 칠할 때에 필요한 최소 비용.
  • 16. 결론 • Wikipedia : method for solving complex problems by breaking them down into simpler subproblems 1. 부분 문제의 정의(Defining subproblems) 2. 부분 문제 간의 점화 관계 유추(Finding recurrences) 3. 초기 상태 및 특수 경우 명세(Solving the base cases)
  • 17. 참고 자료 • http://acmicpc.net • http://web.stanford.edu/class/cs97si/04-dynamic- programming.pdf