반응형
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
private static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
private static BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
private static int[][] M, T;
private static int[] books = new int[501];
public static void main(String[] args)throws IOException{
int loopCount = Integer.parseInt(reader.readLine());
while(loopCount-- > 0){
int n = Integer.parseInt(reader.readLine());
books = new int[n + 1];
M = new int[n + 1][n + 1];
T = new int[n + 1][n + 1];
StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
for(int i = 1; i <= n; i++)books[i] = Integer.parseInt(tokenizer.nextToken());
for(int i = 1; i <= n; i++){
for(int j = i; j <= n; j++)M[i][j] = M[i][j - 1] + books[j];
Arrays.fill(T[i], -1);
}
if(n != 1){
writer.write(String.valueOf(dp(1, n)) + "\n");
}
else{
writer.write(String.valueOf(books[1]) + "\n");
}
}
writer.flush();
}
private static int dp(int i, int j){
if(T[i][j] == -1){
if(i == j){
T[i][j] = 0;
}
else{
T[i][j] = 999999111;
for(int k = i; k < j; k++)T[i][j] = min(M[i][k] + M[k + 1][j] + dp(i, k) + dp(k + 1, j), T[i][j]);
}
}
return T[i][j];
}
private static int min(int val1, int val2){
return val1 > val2? val2 : val1;
}
}
반응형
'알고리즘 > Baekjoon' 카테고리의 다른 글
[Baekjoon] #17086 아기 상어2 (0) | 2022.06.22 |
---|---|
[Baekjoon] #10773 제로 (0) | 2022.05.26 |
[Baekjoon] #6593 상범 빌딩 (0) | 2022.05.18 |
[Baekjoon] #14502 연구소 (0) | 2022.04.07 |
[Baekjoon] #7568 덩치 (0) | 2022.03.15 |