본문 바로가기

백준/다이나믹 프로그래밍

파일 합치기

728x90

www.acmicpc.net/problem/11066

 

11066번: 파일 합치기

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

www.acmicpc.net

 

#include<iostream>
#include <algorithm>
 
int INF = 1000000007;
using namespace std;
 
int dp[501][501];
int cost[501];
int sum[501];
int T, K, i;
 
int main() {
    cin >> T;
    while (T--) {
        cin >> K;
        for (i = 1; i <= K; ++i) {
            cin >> cost[i];
            sum[i] = sum[i - 1] + cost[i];
        }
 
        for (int d = 1; d < K; ++d) {
            for (int tx = 1; tx + d <= K; ++tx) {
                int ty = tx + d;
                dp[tx][ty] = INF;
 
                for (int mid = tx; mid < ty; ++mid)
                    dp[tx][ty] =
                    min(dp[tx][ty], dp[tx][mid] + dp[mid + 1][ty] + sum[ty] - sum[tx - 1]);
            }
        }
 
        cout << dp[1][K] << endl;
    }
    return 0;
}

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

뮤탈리스크  (0) 2021.02.19
평범한 배낭  (0) 2021.02.17
1,2,3 더하기 4  (0) 2021.01.21
팰린드롬?  (0) 2021.01.20
점프점프  (0) 2021.01.19