문제
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
'문제풀이 > DP' 카테고리의 다른 글
[파이썬] [DP] 백준 2293 동전 1 (0) | 2022.04.07 |
---|---|
[파이썬] [DP] 백준 9251 LCS (0) | 2022.03.26 |
[파이썬] [DP] 백준 2579 계단 오르기 (0) | 2022.02.24 |
* [파이썬] [DP] Pro N으로 표현 (0) | 2022.02.17 |
[파이썬] [DP] Pro 도둑질 (0) | 2022.02.17 |