어디까지 갈 수 있을까?
다이나믹 프로그래밍 문제 본문
전에 계산한 값들을 기반으로 현재 값을 구하면 된다
31, 32번 모두 비슷한 유형의 문제
dp문제는 그림을 그려 푸는 게 점화식 세우기 쉬운 듯 하다
31. 금광
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
|
import sys
input=sys.stdin.readline
for _ in range(int(input().rstrip())):
#n*m
n, m=map(int, input().split())
arr=list(map(int, input().split()))
d=[]
i=0
d.append([0]*m)
for _ in range(n):
d.append(arr[i:i+m])
i+=m
d.append([0] * m)
# print(d)
for i in range(1, m):
for j in range(1, n+1):
d[j][i]=d[j][i]+max(d[j-1][i-1], d[j][i-1], d[j+1][i-1])
# print(d)
result=0
for k in range(1, n+1):
if result<d[k][-1]:
result=d[k][-1]
print(result)
|
cs |
32. 정수 삼각형
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
|
import sys
input=sys.stdin.readline
n=int(input())
d=[]
for _ in range(n):
d.append(list(map(int, input().split())))
for j in range(n):
for i in range(j+1):
#왼쪽이 없음 #up, left_up
if i-1<0:
left_up=0
else:
left_up=d[j-1][i-1]
#위가 없음
if i==j:
up=0
else:
up=d[j - 1][i]
#위로 가거나 왼쪽위로 가거나
d[j][i]=d[j][i]+max(up, left_up)
print(max(d[-1]))
|
cs |
728x90
'알고리즘 > 이것이취업을위한코딩테스트다' 카테고리의 다른 글
chapter 10. 그래프 이론(Union-Find, 크루스칼, 최소 신장 트리 알고리즘) (0) | 2021.03.01 |
---|---|
chapter 9. 최단 경로(다익스트라) (0) | 2021.02.23 |
chapter 8. 다이나믹 프로그래밍 (0) | 2021.02.22 |
이진탐색 문제 (0) | 2021.02.19 |
chaper 7. 이진 탐색 (0) | 2021.02.19 |
Comments