문제풀이/DP

[파이썬] [DP] 백준 11066 파일 합치기

승무_ 2022. 3. 14. 19:53

문제

https://www.acmicpc.net/problem/11066

 

11066번: 파일 합치기

소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여진 파일을 합쳐서 최종적으로 소설의 완성본

www.acmicpc.net

 

코드

import sys
INF=sys.maxsize

t=int(input())

while(t):
    t-=1
    k=int(input())
    arr=list(map(int, input().split()))

    dp=[[0]*k for _ in range(k)]

    subsum={-1:0}
    for i,v in enumerate(arr):
        subsum[i]=subsum[i-1]+v

    for i in range(1,k):
        for j in range(k-i):
        	//간격이 1일때
            if i==1:
                dp[j][j+1]=arr[j]+arr[j+1]
                continue
            dp[j][j+i]=INF
            //q는 cut
            for q in range(j,j+i):
                dp[j][j+i]=min(dp[j][j+i], dp[j][q]+dp[q+1][j+i]+subsum[j+i]-subsum[j-1])

    print(dp[0][k-1])

생각 정리

어떤 구간의 최소비용 minCost는, cut을 기준으로 분할할 때, 좌측 그룹의 최소 비용 + 우측 그룹의 최소 비용 + 좌측 압축 수와 우측 압축 수 더하기

이 때 좌측 압축 수 + 우측 압축 수는 그 구간의 모든 수의 합과 같음

 

 

https://developerbee.tistory.com/97

 

[알고리즘 / 백준] 11066 - 파일 합치기

www.acmicpc.net/problem/11066 11066번: 파일 합치기 소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여

developerbee.tistory.com