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

More Related Content

What's hot

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

What's hot (16)

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

Similar to Dynamic programming

이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서KimChangHoen
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 
인하대 프로그래밍 경진대회 - 문제
인하대 프로그래밍 경진대회 - 문제인하대 프로그래밍 경진대회 - 문제
인하대 프로그래밍 경진대회 - 문제NAVER D2
 
03. segment tree
03. segment tree03. segment tree
03. segment tree승혁 조
 
2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions현정 김
 
자료구조1보고서
자료구조1보고서자료구조1보고서
자료구조1보고서KimChangHoen
 
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘GDGCampusKorea
 
Chapter 10 sequence modeling recurrent and recursive nets
Chapter 10 sequence modeling recurrent and recursive netsChapter 10 sequence modeling recurrent and recursive nets
Chapter 10 sequence modeling recurrent and recursive netsKyeongUkJang
 
Code로 이해하는 RNN
Code로 이해하는 RNNCode로 이해하는 RNN
Code로 이해하는 RNNSANG WON PARK
 
2019 ppc answers
2019 ppc answers2019 ppc answers
2019 ppc answers승혁 조
 

Similar to Dynamic programming (18)

이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서
 
internetinternet
internetinternetinternetinternet
internetinternet
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
인하대 프로그래밍 경진대회 - 문제
인하대 프로그래밍 경진대회 - 문제인하대 프로그래밍 경진대회 - 문제
인하대 프로그래밍 경진대회 - 문제
 
03. segment tree
03. segment tree03. segment tree
03. segment tree
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 
BOJ10547
BOJ10547BOJ10547
BOJ10547
 
2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조1보고서
자료구조1보고서자료구조1보고서
자료구조1보고서
 
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
 
Chapter 10 sequence modeling recurrent and recursive nets
Chapter 10 sequence modeling recurrent and recursive netsChapter 10 sequence modeling recurrent and recursive nets
Chapter 10 sequence modeling recurrent and recursive nets
 
Code로 이해하는 RNN
Code로 이해하는 RNNCode로 이해하는 RNN
Code로 이해하는 RNN
 
DP 중급 2
DP 중급 2DP 중급 2
DP 중급 2
 
01. dp hard
01. dp hard01. dp hard
01. dp hard
 
2019 ppc answers
2019 ppc answers2019 ppc answers
2019 ppc answers
 

Dynamic programming

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