https://www.acmicpc.net/problem/14453
입력으로 상대방의 race를 확인할 수 있으며, 그거에 맞도록 적절한 race를 결정해야 합니다.
그리고 베시는 같은 것만 여러번 연속으로 낼 수 있으며, 최대 한 번만 바꿀 수 있습니다.
이 문제는 누적합을 활용할 수 있습니다.
입력으로 주어지는 race의 P, H, S의 누적 합을 각각 구하고,
베시가 race를 변경할 어떤 구간을 기준으로 왼쪽, 오른쪽의 P, H, S의 누적합의 최대를 더한 값으로 구할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private static class Point{
int pCnt;
int hCnt;
int sCnt;
public Point(int p, int h, int s) {
pCnt = p;
hCnt = h;
sCnt = s;
}
}
private static final int MAX = 100001;
private static Point[] dp = new Point[MAX];
private static int N;
private static void func() {
int ret = Math.max(dp[N].pCnt, Math.max(dp[N].hCnt, dp[N].sCnt));
for(int i = 1; i < N; i++) {
int l = Math.max(dp[i].pCnt, Math.max(dp[i].hCnt, dp[i].sCnt));
int r = Math.max(dp[N].pCnt - dp[i].pCnt, Math.max(dp[N].hCnt - dp[i].hCnt, dp[N].sCnt - dp[i].sCnt));
ret = Math.max(ret, l + r);
}
System.out.println(ret);
}
private static void input() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
char x;
N = Integer.parseInt(st.nextToken());
dp[0] = new Point(0, 0, 0);
for (int i = 1; i <= N; i++) {
dp[i] = new Point(0, 0, 0);
st = new StringTokenizer(br.readLine());
x = st.nextToken().charAt(0);
if (x == 'P') {
dp[i].pCnt++;
} else if (x == 'H') {
dp[i].hCnt++;
} else {
dp[i].sCnt++;
}
dp[i].pCnt += dp[i - 1].pCnt;
dp[i].hCnt += dp[i - 1].hCnt;
dp[i].sCnt += dp[i - 1].sCnt;
}
}
public static void main(String[] args) throws Exception {
input();
func();
}
}
|
cs |
'algorithm > dp' 카테고리의 다른 글
boj 12996 Acka (0) | 2023.01.29 |
---|---|
boj 14450 Hoof, Paper, Scissors (Gold) (0) | 2022.12.30 |
boj 2281 데스노트 (0) | 2022.10.08 |
boj 2015 수들의 합 4 (0) | 2022.08.12 |
boj 21923 곡예 비행 (0) | 2022.06.10 |