< 문제 >
< 입출력 >
< 풀이 >
주어진 행렬의 최소 곱셈 연산을 구하는 문제이다.
dp를 이용해서, dp[i][j]에 i+1번째 행렬부터, j+1번째 행렬까지 곱했을 때의 곱셈 연산 횟수의 최솟값을 저장해서 풀었다.
< 코드 >
N = int(input())
arr = []
INF = int(1e9)
for _ in range(N):
r, c = map(int, input().split())
arr.append((r, c))
dp = [[0] * N for _ in range(N)]
for i in range(N - 1):
dp[i][i + 1] = arr[i][0] * arr[i + 1][0] * arr[i + 1][1]
for L in range(2, N):
i = 0
j = L
while j < N:
dp[i][j] = INF
for k in range(i, j):
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + arr[i][0] * arr[k][1] * arr[j][1])
i += 1
j += 1
print(dp[0][N - 1])
'코딩 테스트 > 다이나믹 프로그래밍' 카테고리의 다른 글
[백준 10844번] 쉬운 계단 수 문제풀이 (with Python) (0) | 2023.08.23 |
---|---|
[백준 11722번] 가장 긴 감소하는 부분 수열 문제 풀이 with Python (0) | 2023.08.22 |
[백준 2579번] 계단 오르기 문제 풀이 (0) | 2023.08.02 |
[백준 15486번] 동전 1 문제풀이 (0) | 2023.08.01 |
[백준 15486번] 퇴사 2 문제풀이 (0) | 2023.07.31 |
댓글