๐ ์๊ณ ๋ฆฌ์ฆ ์ ํ
์ฒ์ ๋ฌธ์ ๋ฅผ ์ฝ์ด๋ดค์ ๋, ์ฅ(chapter)์ ํฌ๊ธฐ๋ฅผ ๋ํ ๊ฐ์ ์ ์ฅํด๋๋ ์์ ์ด ํ์์ ์ด๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๊ณ , ๋ฐ๋ณต์ ์ธ ์ฐ์ฐ์ ์ค์ด๋ dp๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๋ ์ฌ๋๋ค. dp๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ๋ ์ค๋ฅด๊ธด ํ์ง๋ง,, dp์ ํต์ฌ์ธ ์ ํ์์ ์ด๋ป๊ฒ ๋ง๋ค์ด์ผํ ์ง ๊ณ ๋ฏผ์ด ๋ง์๋ค.
๐ ํ์ด
dp[i][j]๋ฅผ i๋ฒ์งธ ์ฅ๋ถํฐ j๋ฒ์งธ ์ฅ๊น์ง์ ํฉํ ์ต์๊ฐ์ด๋ผ๊ณ ํ์.
๊ทธ๋ผ dp[i][i]๋ i๋ฒ์งธ ์ฅ ๊ทธ ์์ฒด๊ฐ ๋ ๊ฒ์ด๊ณ ,
dp[i][i+1]๋ i๋ฒ์งธ ์ฅ(filesize[i])๊ณผ i+1๋ฒ์งธ ์ฅ(filesize[i+1])์ ํฉ์ธ filesize[i]+filesize[i+1] ์ด ๋ ๊ฒ์ด๋ค.
dp[i][i+2]๋ ์ด๋ป๊ฒ ๋ ๊น?
dp[i][i] + dp[i+1][i+2] + (filesize[i] + filesize[i+1], filesize[i+2])์ dp[i][i+1] + dp[i+1][i+2] + (filesize[i] + filesize[i+1], filesize[i+2]) ์ค ๋ ์์ ๊ฐ์ด ๋ ๊ฒ์ด๋ค.
๊ทธ์ ๋ฐ๋ผ,
dp[i][j]๋ dp[i][divide] + dp[divide+1][j] + sum(i๋ถํฐ j๊น์ง์ ๋ถ๋ถํฉ)์ด ๋ ๊ฒ์ด๋ค.
์ด๋ divide๋ i์์ j๊น์ง์ ์ ์ค ํ๋์ด๋ค.
๐ ์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); // ํ
์คํธ ์ผ์ด์ค ๊ฐ์
int total = 0; // ๊ฒฐ๊ณผ๊ฐ
for(int t = 0; t < T; t++) {
// ํ์ผ ๊ฐ์
int K = Integer.parseInt(br.readLine());
// ํ์ผ ๋ด์ ๋ฐฐ์ด ๋ฐ ํ์ผ ํฌ๊ธฐ์ ํฉ์ ๋ด์ ๋ฐฐ์ด๊ณผ dp ๋ฐฐ์ด
int[] fileSize = new int[K+1];
int[] sum = new int[K+1];
int[][] dp = new int[K+1][K+1];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int k = 1; k <= K; k++) {
fileSize[k] = Integer.parseInt(st.nextToken());
sum[k] = sum[k-1] + fileSize[k];
}
// dp ์ฐ์ฐ ๊ณผ์
for(int n = 1; n <= K; n++) { // ๋ช ๊ฐ์ ์ฅ์ ๋ฌถ์ ๊ฒ์ธ๊ฐ
for(int from = 1; from + n <= K; from++) { // ์ด๋๋ถํฐ ๋ฌถ์ ๊ฒ์ธ๊ฐ
int to = from + n;
dp[from][to] = Integer.MAX_VALUE;
for(int divide = from; divide < to; divide++) {
dp[from][to] = Math.min(dp[from][to], dp[from][divide] + dp[divide+1][to] + sum[to] - sum[from-1]);
}
}
}
// ์ฒซ๋ฒ์งธ ํ์ผ๋ถํฐ K๋ฒ์งธ ํ์ผ๊น์ง์ ํฉ
System.out.println(dp[1][K]);
}
}
}
https://www.acmicpc.net/problem/11066
11066๋ฒ: ํ์ผ ํฉ์น๊ธฐ
์์ค๊ฐ์ธ ๊น๋์ ์ ์์ค์ ์ฌ๋ฌ ์ฅ(chapter)์ผ๋ก ๋๋์ด ์ฐ๋๋ฐ, ๊ฐ ์ฅ์ ๊ฐ๊ฐ ๋ค๋ฅธ ํ์ผ์ ์ ์ฅํ๊ณค ํ๋ค. ์์ค์ ๋ชจ๋ ์ฅ์ ์ฐ๊ณ ๋์๋ ๊ฐ ์ฅ์ด ์ฐ์ฌ์ง ํ์ผ์ ํฉ์ณ์ ์ต์ข ์ ์ผ๋ก ์์ค์ ์์ฑ๋ณธ
www.acmicpc.net
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 13269๋ฒ : ์๊ธฐ๋๋ฌด | JAVA (0) | 2023.04.04 |
---|---|
๋ฐฑ์ค 7579๋ฒ : ์ฑ | JAVA (0) | 2023.03.29 |
๋ฐฑ์ค 2933๋ฒ : ๋ฏธ๋ค๋ | JAVA (0) | 2023.03.27 |
[JAVA] ์ฐ์ ์์ ํ Priority Queue (0) | 2023.03.22 |
๋ฐฑ์ค 2749๋ฒ : ํผ๋ณด๋์น ์ 3 | JAVA (0) | 2023.03.21 |
๋๊ธ