본문 바로가기
알고리즘 문제/자료구조&알고리즘

다이나믹 프로그래밍 예제

by 태윤2 2020. 10. 22.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 정수 X를 입력받기
= int(input())
 
# 앞서 계산된 결과를 저장하기 위한 dp 테이블 초기화
= [0* 30001
 
# 다이나믹 프로그래밍(Dynamic programming) 진행(보텀업)
for i in range(2, x+1):
  # 현재의 수에서 1을 빼는 경우
  d[i] = d[i - 1+1
  # 현재의 수가 2로 나누어 떨어지는 경우
  if i % 2 == 0:
    d[i] = min(d[i], d[i // 2+1)
  if i % 3 == 0:
    d[i] = min(d[i], d[i // 3+1)
  if i % 5 == 0:
    d[i] = min(d[i], d[i // 5+1)
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 정수 N를 입력받기
= int(input())
# 모든 식량 정보 입력받기
array = list(map(int, input().split()))
 
# 앞서 게산된 결과를 저장하기 위한 DP 테이블 초기화
= [0* 100
 
# 다이나믹 프로그래밍(Dynamic Programming) 진행(보텀업)
d[0= array[0]
d[1= max(array[0], array[1])
print(d[1])
for i in range(2, n):
  d[i] = max(d[i-1], d[i-2]+array[i])
 
#게산된 결과 출력
 
print(d[n - 1])
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 정수 N을 입력 받기
= int(input())
 
# 앞서 계산된 결과를 저장하기 위한 DP 테이블 초기화
= [0* 1001
 
# 다이나믹 프로그래밍(Dynamic Programming) 진행 (보텀업)
d[1= 1
d[2= 3
for i in range(3, n + 1):
    d[i] = (d[i - 1+ 2 * d[i - 2]) % 796796
 
# 계산된 결과 출력
print(d[n])
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 효율적인 화폐 구성
 
# 정수 N, M을 입력 받기
n, m = map(int, input().split())
# N개의 화폐 단위 정보를 입력 받기
array = []
for i in range(n):
    array.append(int(input()))
 
# 한 번 계산된 결과를 저장하기 위한 DP 테이블 초기화
= [10001* (m + 1)
 
# 다이나믹 프로그래밍(Dynamic Programming) 진행(보텀업)
d[0= 0
for i in range(n):
  for j in range(array[i], m+1):
      if d[j - array[i]] != 10001# (i-k)원을 만드는 방법이 존재하는 경우
        d[j] = min[d[j],d[j - array[i]]+1]
 
# 계산된 결과 출력
if d[m] == 10001# 최종적으로 M원을 만드는 방법이 없는 경우
    print(-1)
else:
    print(d[m])
 
 
 
 
 
cs

 

 

 

 

 

'알고리즘 문제 > 자료구조&알고리즘' 카테고리의 다른 글

최단경로 예제  (0) 2020.10.24
최단 경로  (0) 2020.10.23
다이나믹 프로그래밍  (0) 2020.10.22
다이나믹 프로그래밍  (0) 2020.10.22
이진 탐색 예제  (0) 2020.10.22