https://github.com/Dev-Guccin
Guccin
https://github.com/Dev-Guccin
전체 방문자
오늘
어제
  • 분류 전체보기 (172)
    • 알고리즘 (140)
    • 삽질방지 (13)
    • SystemHacking (1)
    • 일상 (4)
    • 개발 (8)
    • 스프링 부트 REST API 개발일지 (5)
    • JPA (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 큐
  • 스택
  • counter
  • python3
  • 이분 탐색
  • 최소힙
  • 재귀함수
  • 이분탐색
  • 백트래킹
  • 그리디
  • 다이나믹프로그래밍
  • 재귀
  • MST
  • heapq
  • 유니온 파인드
  • DP
  • 12015
  • Python
  • LIS
  • DFS
  • BFS
  • 유클리드호제법
  • 그래프
  • 파이썬
  • 최단경로
  • 프로그래머스
  • 최대공약수
  • 다이나믹 프로그래밍
  • 백준
  • 다익스트라

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
https://github.com/Dev-Guccin

Guccin

백준 11049 (행렬 곱셈 순서, DP)
알고리즘

백준 11049 (행렬 곱셈 순서, DP)

2021. 4. 24. 21:43

처음에 보고 먼소린가 했는데 행렬의 곱셈이 이루어진 후의 연산 비용을 계산해보는 문제이다. 따라서 최소값을 구하면 된다.

그럼 식을 세워야 한다. 저번에 풀었던 11066문제와 비슷하다. 양옆으로 연산을 하기 때문에 잘 쪼개서 계산하면 된다.

그래서 일반항으로 나타내면 아래와 같다.

아주 다행인건 최적화 따위를 안해도 된다는 것이다.

여기서 팁은 최솟값이 적어도 2^31-1보다 작아야한다는 것이다. 따라서 이부분을 놓치지 않고 코딩으로 바꾸어 주면 아래와 같다.

n = int(input())
p = []
for i in range(n):
    p.append(tuple(map(int, input().split())))
D = [[0 for i in range(n)] for i in range(n)]
# 연산시작
for dig in range(n-1):
    for i in range(n-1-dig):
        j = i + 1 + dig
        # min구하기
        D[i][j] = 2 ** 32
        for k in range(i, j):
            D[i][j] = min(D[i][j], D[i][k] + D[k+1][j] + p[i][0]*p[k][1]*p[j][1])
print(D[0][n-1])

pypy3로 제출해서 통과하였다.

DP은근히 조금 실력이 늘은듯?!!ㅎㅎ

'알고리즘' 카테고리의 다른 글

백준 2606 바이러스 (DFS)  (0) 2021.04.28
백준 1260 풀이 (DFS, BFS, 그래프 탐색)  (0) 2021.04.27
백준 11066 풀이 (파일 합치기, DP, Knuth Optimization)  (0) 2021.04.23
백준 1655 풀이 (가운데를 말해요, 우선순위 큐)  (0) 2021.03.29
백준 11286 풀이 (절댓값 힙, 최소 힙, heapq)  (0) 2021.03.29
    '알고리즘' 카테고리의 다른 글
    • 백준 2606 바이러스 (DFS)
    • 백준 1260 풀이 (DFS, BFS, 그래프 탐색)
    • 백준 11066 풀이 (파일 합치기, DP, Knuth Optimization)
    • 백준 1655 풀이 (가운데를 말해요, 우선순위 큐)
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin

    티스토리툴바