백준 11049 [python]
https://www.acmicpc.net/problem/11049
N = int(input())
A = [[0 for i in range(N)] for i in range(N)]
C = [[[0, 0] for i in range(N)] for i in range(N)]
dp = [[0 for i in range(N)] for i in range(N)]
for i in range(N):
C[i][i] = list(map(int, input().split()))
for i in range(N - 1):
A[i][i + 1] = i
C[i][i + 1] = [C[i][i][0], C[i + 1][i + 1][1]]
dp[i][i + 1] = C[i][i][0] * C[i][i][1] * C[i + 1][i + 1][1]
for a in range(2, N):
for i in range(N - a):
j = a + i
C[i][j] = [C[i][i][0], C[j][j][1]]
dp[i][j], A[i][j] = min([C[i][k][0] * C[i][k][1] * C[k + 1][j][1] + /
dp[i][k] + dp[k + 1][j], k] for k in range(i, j))
print(dp[0][N - 1])
11066번이랑 똑같다고 생각해서 크누스 최적화를 써서 풀었더니 틀렸다. 이유는 크누스 최적화가 가능하기 위한 조건 중 하나인 C[b][c] <= C[a][d] (a <= b <= c <= d)를 만족하지 않아서 그렇다. 여기서 C는 점화식 DP[i][j] = min(DP[i][k] + DP[k][j]) + C[i][j] (i < k < j)의 C이므로 이 문제에서 C[i][j]는 배열곱 횟수인 N * M * K인 느낌이다. 11066번 문제는 파일을 합치면 당연히 커지므로 이 조건을 만족하지만, 이 문제는 직관적으로 보더라도 C의 값이 커지지 않아 이 조건을 만족하지 않는다.
11066번 문제풀이에 비해 코드를 깔끔하게 썼다.
Author And Source
이 문제에 관하여(백준 11049 [python]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@seokcoding/백준-11049-python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)