본문 바로가기

백준/탐색

백준 2208 - 보석 줍기

728x90

www.acmicpc.net/problem/2208

풀이

배열의 prefix sum을 계산해준다.

 

n개의 보석만큼 반복문을 돌리는데 다음 계산의 최댓값이 정답이 된다.

 

보석 i번째까지 전부 먹었을 때 누적합 - 이전 구간에서 최대로 손해를 입는 누적합

 

구현에서는 이전 구간에서 최대로 손해를 입는 누적합을 저장하기 위해 별도의 변수를 두었다.

 

전체 코드

더보기
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
#include <bits/stdc++.h>
     
using namespace std;
 
int ar[100001];
int prefix[100001];
int n, m;
int res;
 
int main()
{
    cin.tie(0); ios::sync_with_stdio(false);
    cin >> n >> m;
 
    for (int i = 1; i <= n; ++i)
    {
        cin >> ar[i];
        prefix[i] = prefix[i - 1+ ar[i];
    }
 
    int val = 0;
 
    for (int i = m; i <= n; ++i)
        res = max(res, prefix[i] - (val = min(prefix[i - m], val)));
 
    cout << res;
}
cs
728x90

'백준 > 탐색' 카테고리의 다른 글

[KOI] 백준 2502 - 떡 먹는 호랑이  (0) 2022.05.26
백준 4160 - 이혼  (0) 2022.01.16
[ICPC] 백준 20047 - 동전 옮기기  (0) 2021.10.09
백준 1208 - 부분수열의 합 2  (0) 2021.01.23
[COCI] 백준 3020 - 개똥벌레  (0) 2021.01.04