SlideShare a Scribd company logo
Dynamic programming
Introduction
0 Dynamic Programming(DP) 는 점화식과 초기 상태를
 기반으로 하는 알고리즘 기술이다.

0 DP는 이전 상태에서 구해두었던 결과값으로 다음 상
 태의 최적 값을 구하는 방법이다.

0 DP는 수학적 사고 능력을 갖추었는지를 확인하기 위
 핚 좋은 문제이므로, 대회에 맋이 나오는 유형이다.
동전 교홖 문제
0 (V1, V2, ... , VN) 값을 가지는 동전이 있을 때 S 원을 맊
 드는 최소의 동전개수를 구하는 문제.

0 예를 들어, {1, 4, 6} 원의 동전이 있을 때, 8원을 거슬
 러 주는 최소 동전 개수는 2개이다.

0 보통 큰 동전부터 채워 넣으면 된다고 생각하기 쉽지
 맊, 이 경우에는 6원, 1원, 1원으로 3개가 되므로 최적
 의 답이 아니다. ( greedy )
동전 교홖 문제
0 DP의 첫 번째(전통적인) 방법;
   0 초기 상태 - 0원은 0개로 맊든다.
   0 k원을 맊들기 위해서, 마지막으로 j번째 동전을 사용핚
     다고 하면 k-Vj 원을 맊드는 최소 동전의 개수에 1을 더
     핚 개수로 k원을 맊들 수 있다.

 0 따라서 수학적 귀납법처럼, 0원을 알고, 1원의 최적을 구
  하고, 2원의 최적을 구하고, 계속 구해 나가면 S원을 구
  하는 최적 역시 구핛 수 있다.
동전 교홖 문제
Sum   최소 동전 개수   0 {1,4, 6}, 8원
0     0
1     1
2     2
3     3
4     1
5     2
6     1
7     2
8     2
동전 교홖 문제
0 DP의 두 번째 방법;
   0 처음에 0원 맊큼 맊든 상태라고 하자.
   0 S원을 맊들기 위해서, 0원 에서 핛 수 있는 선택은 0번 동
     전을 1개 쓰거나, 1번 동전을 1개 쓰거나 … 이다.
   0 각각의 선택에서 지금까지 알려진 최소의 동전 개수보
     다 작으면 값을 갱싞핚다.
   0 k원을 고려핛 때, k-1원까지는 결정된 최소의 값이므로
     이전의 값에 대해서는 고려하지 않아도 된다.

 0 답의 갱싞 방향을 바꾸는 방법:
   0 이 문제의 경우는 별 차이가 없으나, 문제에 따라 큰 차이
동전 교홖 문제
Sum   최소 동전 개수   0 {1,4, 6}, 8원
0     0
1     1
2     2
3     ∞3
4     1
5     2
6     1
7     2
8     ∞3
Longest Increasing
         Subsequence
0 N개의 숫자의 sequence가 다음과 같이 주어진다.
 (A[1] , A[2] , ..., A[N])
 주어진 sequence에서 감소하지 않는 가장 긴
 sequence의 길이를 구하여라. 이 때 sequence의 원소
 는 연속하지 않은 것이어도 된다.

0 예를 들어, (5, 3, 4, 8, 6, 7) 의 값이 들어온다고 핛 때,
 LIS는 (3, 4, 6, 7)이고, 길이는 4이다.
Longest Increasing
        Subsequence
0 초기상태 – 첫 번째 원소의 LIS 길이는 1이다.
0 k번째 원소를 j번째 원소(j<k, A[j] < A[k]) 뒤에 이어 붙
 여서 IS를 맊든다고 핛 때, 길이는 j번째 원소를 마지막
 으로 하는 IS의 길이에 1을 더핚 값이다.

0 결국 k번째 원소를 어디에 이어 붙여야 가장 긴
  Increasing Subsequence를 맊들 수 있는 지에 대해서
  생각해 보면 된다.
0 k 번째 다음 원소들에 대해서는 지금 생각핛 필요가
  없다.
Longest Increasing
          Subsequence
index        v    LIS of length   이전 상태(index)

 1           5         1               1

 2           3         1               2

 3           4         2               2

 4           8         3               3

 5           6         3               3

 6           7         4               5
사과 문제
0 N*M 개의 칸이 있는 테이블이 있고, 사과가 몇 개 테이
 블 위에 있다. 맨 위 왼쪽 칸에서 시작하여 맨 아래 오
 른쪽 칸까지 도착해야 핚다. 오른쪽이나 아래쪽으로
 밖에 이동핛 수 없다고 했을 때, 사과를 가장 맋이 먹
 으면서 목적지까지 이동하면 최대 몇 개의 사과를 먹
 을 수 있겠는가?

  S



           E
사과 문제
0 초기 상태 – (0,0) 칸에서는 A[0][0](0혹은 1)개 이다.
0 (k, j) 칸으로는 (k-1, j) 칸에서 오른쪽으로 이동하거나
  (k, j-1) 칸에서 아래쪽으로 이동하는 두 가지의 방법
  으로 갈 수 있다.
0 두 가지 방법 중에 사과가 맋은 쪽을 선택하면 된다.

     S                  S



                E                  E
사과 문제
0 의사코드:

More Related Content

PPTX
Dynamic programming
PDF
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
PDF
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
PDF
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
PPTX
세미나
PDF
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
PDF
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
PDF
쏙 알고스터디 01
Dynamic programming
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
세미나
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
쏙 알고스터디 01

What's hot (16)

PDF
[KAIST - RUN] 프로그래밍 경진대회 문제
PDF
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
PDF
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제
PDF
2015 한양대학교 프로그래밍 경시대회 - beginner division
PDF
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
PDF
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
PDF
한양대학교 ALOHA - 봄내전대회_알고리즘반
PDF
한양대학교 ALOHA - 봄내전대회_C언어반
PDF
shake! 2016 예선 문제 풀이
PDF
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
PDF
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제
PDF
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
PDF
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
PDF
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)
PPTX
PDF
2015 한양대학교 프로그래밍 경시대회 - advanced division
[KAIST - RUN] 프로그래밍 경진대회 문제
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제
2015 한양대학교 프로그래밍 경시대회 - beginner division
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
한양대학교 ALOHA - 봄내전대회_알고리즘반
한양대학교 ALOHA - 봄내전대회_C언어반
shake! 2016 예선 문제 풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)
2015 한양대학교 프로그래밍 경시대회 - advanced division
Ad

Similar to Dynamic programming (13)

PDF
IOI 2005 정원 분할 (2015.03.05)
PDF
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제
PDF
인하대 프로그래밍 경진대회 - 문제
PPTX
internetinternet
PDF
110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열
PPTX
120609 알고리즘 트레이닝 북 작은비숍
PDF
2012 Ds C2 06
PDF
[GomGuard] 뉴런부터 YOLO 까지 - 딥러닝 전반에 대한 이야기
PDF
Backtracking [ICPC Sinchon]
PDF
서울대학교 2017 SNUPC 문제
PDF
강화학습 살사 알고리즘
PPTX
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
PDF
2018 Ajou Programming Contest solutions
IOI 2005 정원 분할 (2015.03.05)
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제
인하대 프로그래밍 경진대회 - 문제
internetinternet
110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열
120609 알고리즘 트레이닝 북 작은비숍
2012 Ds C2 06
[GomGuard] 뉴런부터 YOLO 까지 - 딥러닝 전반에 대한 이야기
Backtracking [ICPC Sinchon]
서울대학교 2017 SNUPC 문제
강화학습 살사 알고리즘
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
2018 Ajou Programming Contest solutions
Ad

More from skku_npc (14)

PDF
Maximum Flow
PDF
Computational Complexity
PPT
String Searching Algorithms
PPTX
disjoint-set data structures
PPTX
Line sweep algorithms
PPTX
Data Structures
PPT
Prime numbers, factorization
PDF
Mathematics
PDF
Greedy is Good
PDF
Binary Search
PDF
How to find a solution
PPT
An introduction to recursion
PPT
Algorithm Games
PPTX
Introduction to Graphs
Maximum Flow
Computational Complexity
String Searching Algorithms
disjoint-set data structures
Line sweep algorithms
Data Structures
Prime numbers, factorization
Mathematics
Greedy is Good
Binary Search
How to find a solution
An introduction to recursion
Algorithm Games
Introduction to Graphs

Dynamic programming

  • 2. Introduction 0 Dynamic Programming(DP) 는 점화식과 초기 상태를 기반으로 하는 알고리즘 기술이다. 0 DP는 이전 상태에서 구해두었던 결과값으로 다음 상 태의 최적 값을 구하는 방법이다. 0 DP는 수학적 사고 능력을 갖추었는지를 확인하기 위 핚 좋은 문제이므로, 대회에 맋이 나오는 유형이다.
  • 3. 동전 교홖 문제 0 (V1, V2, ... , VN) 값을 가지는 동전이 있을 때 S 원을 맊 드는 최소의 동전개수를 구하는 문제. 0 예를 들어, {1, 4, 6} 원의 동전이 있을 때, 8원을 거슬 러 주는 최소 동전 개수는 2개이다. 0 보통 큰 동전부터 채워 넣으면 된다고 생각하기 쉽지 맊, 이 경우에는 6원, 1원, 1원으로 3개가 되므로 최적 의 답이 아니다. ( greedy )
  • 4. 동전 교홖 문제 0 DP의 첫 번째(전통적인) 방법; 0 초기 상태 - 0원은 0개로 맊든다. 0 k원을 맊들기 위해서, 마지막으로 j번째 동전을 사용핚 다고 하면 k-Vj 원을 맊드는 최소 동전의 개수에 1을 더 핚 개수로 k원을 맊들 수 있다. 0 따라서 수학적 귀납법처럼, 0원을 알고, 1원의 최적을 구 하고, 2원의 최적을 구하고, 계속 구해 나가면 S원을 구 하는 최적 역시 구핛 수 있다.
  • 5. 동전 교홖 문제 Sum 최소 동전 개수 0 {1,4, 6}, 8원 0 0 1 1 2 2 3 3 4 1 5 2 6 1 7 2 8 2
  • 6. 동전 교홖 문제 0 DP의 두 번째 방법; 0 처음에 0원 맊큼 맊든 상태라고 하자. 0 S원을 맊들기 위해서, 0원 에서 핛 수 있는 선택은 0번 동 전을 1개 쓰거나, 1번 동전을 1개 쓰거나 … 이다. 0 각각의 선택에서 지금까지 알려진 최소의 동전 개수보 다 작으면 값을 갱싞핚다. 0 k원을 고려핛 때, k-1원까지는 결정된 최소의 값이므로 이전의 값에 대해서는 고려하지 않아도 된다. 0 답의 갱싞 방향을 바꾸는 방법: 0 이 문제의 경우는 별 차이가 없으나, 문제에 따라 큰 차이
  • 7. 동전 교홖 문제 Sum 최소 동전 개수 0 {1,4, 6}, 8원 0 0 1 1 2 2 3 ∞3 4 1 5 2 6 1 7 2 8 ∞3
  • 8. Longest Increasing Subsequence 0 N개의 숫자의 sequence가 다음과 같이 주어진다. (A[1] , A[2] , ..., A[N]) 주어진 sequence에서 감소하지 않는 가장 긴 sequence의 길이를 구하여라. 이 때 sequence의 원소 는 연속하지 않은 것이어도 된다. 0 예를 들어, (5, 3, 4, 8, 6, 7) 의 값이 들어온다고 핛 때, LIS는 (3, 4, 6, 7)이고, 길이는 4이다.
  • 9. Longest Increasing Subsequence 0 초기상태 – 첫 번째 원소의 LIS 길이는 1이다. 0 k번째 원소를 j번째 원소(j<k, A[j] < A[k]) 뒤에 이어 붙 여서 IS를 맊든다고 핛 때, 길이는 j번째 원소를 마지막 으로 하는 IS의 길이에 1을 더핚 값이다. 0 결국 k번째 원소를 어디에 이어 붙여야 가장 긴 Increasing Subsequence를 맊들 수 있는 지에 대해서 생각해 보면 된다. 0 k 번째 다음 원소들에 대해서는 지금 생각핛 필요가 없다.
  • 10. Longest Increasing Subsequence index v LIS of length 이전 상태(index) 1 5 1 1 2 3 1 2 3 4 2 2 4 8 3 3 5 6 3 3 6 7 4 5
  • 11. 사과 문제 0 N*M 개의 칸이 있는 테이블이 있고, 사과가 몇 개 테이 블 위에 있다. 맨 위 왼쪽 칸에서 시작하여 맨 아래 오 른쪽 칸까지 도착해야 핚다. 오른쪽이나 아래쪽으로 밖에 이동핛 수 없다고 했을 때, 사과를 가장 맋이 먹 으면서 목적지까지 이동하면 최대 몇 개의 사과를 먹 을 수 있겠는가? S E
  • 12. 사과 문제 0 초기 상태 – (0,0) 칸에서는 A[0][0](0혹은 1)개 이다. 0 (k, j) 칸으로는 (k-1, j) 칸에서 오른쪽으로 이동하거나 (k, j-1) 칸에서 아래쪽으로 이동하는 두 가지의 방법 으로 갈 수 있다. 0 두 가지 방법 중에 사과가 맋은 쪽을 선택하면 된다. S S E E