Skip to content

Commit 313bee1

Browse files
authored
Merge pull request #782 from AlgorithmWithGod/Ukj0ng
[20250831] BOJ / P5 / 같은 탑 / 한종욱
2 parents ffd2fab + aaaa48f commit 313bee1

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
```
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+
private static int[] block, dp;
9+
private static int N, sum;
10+
11+
public static void main(String[] args) throws IOException {
12+
init();
13+
DP();
14+
15+
int answer = dp[0] > 0 ? dp[0] : -1;
16+
17+
bw.write(answer + "\n");
18+
bw.flush();
19+
bw.close();
20+
br.close();
21+
}
22+
23+
private static void init() throws IOException {
24+
N = Integer.parseInt(br.readLine());
25+
sum = 0;
26+
27+
block = new int[N];
28+
StringTokenizer st = new StringTokenizer(br.readLine());
29+
for (int i = 0; i < N; i++) {
30+
block[i] = Integer.parseInt(st.nextToken());
31+
sum += block[i];
32+
}
33+
34+
dp = new int[sum + 1];
35+
Arrays.fill(dp, -1);
36+
dp[0] = 0;
37+
}
38+
39+
private static void DP() {
40+
for (int i = 0; i < N; i++) {
41+
int[] newDp = dp.clone();
42+
43+
for (int j = 0; j <= sum; j++) {
44+
if (dp[j] == -1) continue;
45+
46+
int higher = dp[j];
47+
int lower = higher - j;
48+
49+
newDp[j + block[i]] = Math.max(newDp[j + block[i]], higher + block[i]);
50+
51+
int newLower = lower + block[i];
52+
if (newLower > higher) {
53+
newDp[newLower - higher] = Math.max(newDp[newLower - higher], newLower);
54+
} else {
55+
newDp[higher - newLower] = Math.max(newDp[higher - newLower], higher);
56+
}
57+
}
58+
59+
dp = newDp;
60+
}
61+
}
62+
}
63+
```

0 commit comments

Comments
 (0)