[BOJ][⚪2][백준#16493] 최대 페이지 수

작성:    

업데이트:

카테고리:

태그: , , ,

문제 출처

BAEKJOON Online Judge #16493


문제

철수는 한양대학교 도서관에서 책을 빌려놓고 까먹고 있다가 며칠 후 책을 반납해야 한다는 사실을 깨달았다. 남은 기간 동안 최대한 많은 페이지를 읽고 연체없이 반납하고 싶다.

빌린 책은 여러 챕터로 구성된 에세이집인데 챕터들은 서로 독립적이다. 즉, 어느 챕터를 읽기 위해 다른 챕터를 먼저 읽어야 할 필요가 없다. 철수는 중간에 관두는 것을 못견디는 성격이라, 한 챕터를 읽기 시작하면 끝까지 봐야한다.

남은 기간 N일과, 책의 각 챕터 당 그 챕터를 전부 읽는데 소요되는 일 수와 페이지 수가 주어질 때, N일간 읽을 수 있는 최대 페이지 수를 구하는 프로그램을 작성하라.


입력

첫째 줄에 N(1 ≤ N ≤ 200)과 챕터의 수 M(1 ≤ M ≤ 20)이 주어진다. 둘째 줄부터 각 챕터 당 읽는데 소요되는 일 수와 페이지 수가 주어진다. 소요되는 일 수는 20보다 작거나 같은 자연수이고, 페이지 수는 300보다 작거나 같은 자연수이다.


출력

읽을 수 있는 최대 페이지 수를 출력한다.


예제

예제 1

입력

7 7
3 10
5 20
1 10
1 20
2 15
4 40
2 200


출력

260


예제 2

입력

5 3
2 100
2 20
2 40


출력

140


My Sol

import sys
input = sys.stdin.readline

N, M = map(int, input().split())
dp = [[0]*(N+1) for _ in range(M+1)]

for i in range(1, M+1):
    days, pages = map(int, input().split())
    for j in range(1, N+1):
        if j >= days:
            dp[i][j] = max(dp[i-1][j], dp[i-1][j-days] + pages)
        else:
            dp[i][j] = dp[i-1][j]

print(dp[M][N])

전형적인 DP문제인 배낭문제와 같았다. 특정 소요일과 페이지에 대해서 소요일이 현재 누적 j에 대해


결과

맞았습니다!!

댓글남기기