17484번: 진우의 달 여행 (Small)
첫줄에 지구와 달 사이 공간을 나타내는 행렬의 크기를 나타내는 N, M (2≤ N, M ≤ 6)이 주어진다. 다음 N줄 동안 각 행렬의 원소 값이 주어진다. 각 행렬의 원소값은 100 이하의 자연수이다.
www.acmicpc.net
코드
n, m = map(int, input().split())
fuels = [list(map(int, input().split())) for _ in range(n)]
dp = [[[int(1e9)]*3 for _ in range(m)] for _ in range(n+1)]
for j in range(m):
for k in range(3):
dp[0][j][k] = 0
for i in range(1, n+1):
for j in range(m):
if j==0:
dp[i][j][1] = dp[i-1][j][2]+fuels[i-1][j]
dp[i][j][2] = min(dp[i-1][j+1][0], dp[i-1][j+1][1])+fuels[i-1][j]
elif 0<j<m-1:
dp[i][j][0] = min(dp[i-1][j-1][1], dp[i-1][j-1][2])+fuels[i-1][j]
dp[i][j][1] = min(dp[i-1][j][0], dp[i-1][j][2])+fuels[i-1][j]
dp[i][j][2] = min(dp[i-1][j+1][0], dp[i-1][j+1][1])+fuels[i-1][j]
else:
dp[i][j][0] = min(dp[i-1][j-1][1], dp[i-1][j-1][2])+fuels[i-1][j]
dp[i][j][1] = dp[i-1][j][0]+fuels[i-1][j]
ans = int(1e9)
for j in range(m):
ans = min(min(dp[n][j]), ans)
print(ans)
'문제풀이 > DP' 카테고리의 다른 글
[Python/파이썬] 백준 1823번 수확 (0) | 2024.02.16 |
---|---|
[Python/파이썬] 백준 4095번 최대 정사각형 (0) | 2024.02.10 |
[Python/파이썬] 백준 13302번 리조트 (0) | 2024.01.23 |
[Python/파이썬] 백준 1958번 LCS 3 (0) | 2024.01.05 |
[Python/파이썬] 백준 11060번 점프 점프 (0) | 2023.12.25 |