acmicpc
[BAEKJOON] 11066. 파일 합치기
코드와이
2021. 6. 16. 15:26
문제링크
https://www.acmicpc.net/problem/11066
11066번: 파일 합치기
소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여진 파일을 합쳐서 최종적으로 소설의 완성본
www.acmicpc.net
dp... 너무 어렵다 dp..
검색을 통해 이해했다.
dp[i][i+1] : i 번째 파일부터 i+1 번째 파일을 합칠 때의 값
package acmicpc.Gold3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 파일_합치기 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for(int tc = 1; tc <= T ; tc++) {
int n = Integer.parseInt(br.readLine());
int arr[] = new int[n+1];
int sum[] = new int[n+1];
int[][] dp = new int[n+1][n+1];
st = new StringTokenizer(br.readLine());
for(int i = 1 ; i <= n ; i++) {
arr[i] = Integer.parseInt(st.nextToken());
sum[i] = sum[i-1] + arr[i];
}
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; i + j <= n ; j++) {
int x = j + i;
dp[j][x] = Integer.MAX_VALUE;
for(int k = j ; k < x ; k++) {
dp[j][x] = Math.min(dp[j][x], dp[j][k] + dp[k+1][x] + sum[x] - sum[j-1]);
}
}
}
System.out.println(dp[1][n]);
}
}
}