Skip to content

Commit e59e845

Browse files
authored
Merge pull request #483 from AlgorithmWithGod/khj20006
[20250717] BOJ / P5 / 팀 구성 / 권혁준
2 parents 02cac7b + 47a8393 commit e59e845

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
```java
2+
import java.util.*;
3+
import java.io.*;
4+
5+
class IOController {
6+
BufferedReader br;
7+
BufferedWriter bw;
8+
StringTokenizer st;
9+
10+
public IOController() {
11+
br = new BufferedReader(new InputStreamReader(System.in));
12+
bw = new BufferedWriter(new OutputStreamWriter(System.out));
13+
st = new StringTokenizer("");
14+
}
15+
16+
String nextLine() throws Exception {
17+
String line = br.readLine();
18+
st = new StringTokenizer(line);
19+
return line;
20+
}
21+
22+
String nextToken() throws Exception {
23+
while (!st.hasMoreTokens()) nextLine();
24+
return st.nextToken();
25+
}
26+
27+
int nextInt() throws Exception {
28+
return Integer.parseInt(nextToken());
29+
}
30+
31+
long nextLong() throws Exception {
32+
return Long.parseLong(nextToken());
33+
}
34+
35+
double nextDouble() throws Exception {
36+
return Double.parseDouble(nextToken());
37+
}
38+
39+
void close() throws Exception {
40+
bw.flush();
41+
bw.close();
42+
}
43+
44+
void write(String content) throws Exception {
45+
bw.write(content);
46+
}
47+
48+
}
49+
50+
public class Main {
51+
52+
static IOController io;
53+
54+
//
55+
56+
static int N, K;
57+
static int[][] infos;
58+
59+
public static void main(String[] args) throws Exception {
60+
61+
io = new IOController();
62+
63+
init();
64+
solve();
65+
66+
io.close();
67+
68+
}
69+
70+
public static void init() throws Exception {
71+
72+
N = io.nextInt();
73+
K = io.nextInt();
74+
infos = new int[N][];
75+
for(int i=0;i<N;i++) infos[i] = new int[]{io.nextInt(),io.nextInt()};
76+
77+
}
78+
79+
static void solve() throws Exception {
80+
81+
Arrays.sort(infos, (a,b) -> a[1]==b[1] ? a[0]-b[0] : a[1]-b[1]);
82+
int[] a = new int[N+1];
83+
int[] b = new int[N+1];
84+
for(int i=0;i<N;i++) {
85+
a[i+1] = infos[i][0];
86+
b[i+1] = infos[i][1];
87+
}
88+
long[] dp = new long[N+1];
89+
long[] max = new long[N+1];
90+
for(int i=3;i<=N;i++) {
91+
dp[i] = max[i-1];
92+
if(b[i] - b[i-2] <= K) {
93+
dp[i] = Math.max(dp[i], max[i-3] + a[i-2] + a[i-1] + a[i]);
94+
}
95+
96+
if(i >= 4 && b[i] - b[i-3] <= K) {
97+
List<Integer> list1 = new ArrayList<>();
98+
for(int j=i-3;j<=i;j++) list1.add(a[j]);
99+
Collections.sort(list1);
100+
dp[i] = Math.max(dp[i], max[i-4] + a[i-3] + a[i-2] + a[i-1] + a[i] - list1.get(0));
101+
102+
if(i >= 5 && b[i] - b[i-4] <= K) {
103+
list1 = new ArrayList<>();
104+
for(int j=i-4;j<=i;j++) list1.add(a[j]);
105+
Collections.sort(list1);
106+
dp[i] = Math.max(dp[i], max[i-5] + a[i-4] + a[i-3] + a[i-2] + a[i-1] + a[i] - list1.get(0) - list1.get(1));
107+
}
108+
}
109+
110+
max[i] = Math.max(max[i-1], dp[i]);
111+
}
112+
io.write(max[N] + "\n");
113+
114+
}
115+
116+
}
117+
```

0 commit comments

Comments
 (0)