※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 16493번 문제인 최대 페이지 수이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/16493

 

챕터의 수 \(M\)이 많아야 20이므로, 읽을 챕터를 고르는 경우의 수는 \(2^{20}=1048576\)가지뿐임을 관찰하자. (읽는 순서에 상관없이 읽는 데에 드는 시간과 읽은 페이지수는 변하지 않음을 확인하자.)

 

따라서 모든 챕터 선택의 경우를 한번씩 살피는 완전 탐색을 통해 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int D, N;
int A[20], P[20];
int days, val, ans;

void func(int idx) {
    if (idx == N) {
        if (days <= D) ans = max(ans, val);
        return;
    }
    func(idx + 1);
    days += A[idx];
    val += P[idx];
    func(idx + 1);
    days -= A[idx];
    val -= P[idx];
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> D >> N;
    for (int i = 0; i < N; i++) cin >> A[i] >> P[i];
    func(0);

    cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 24229 // C++] 모두싸인 출근길  (0) 2024.05.26
[BOJ 23814 // C++] 아 저는 볶음밥이요  (1) 2024.05.25
[BOJ 31867 // C++] 홀짝홀짝  (0) 2024.05.23
[BOJ 31866 // C++] 손가락 게임  (0) 2024.05.22
[BOJ 25562 // C++] 차의 개수  (0) 2024.05.21

+ Recent posts