n,m = map(int, input().split())
read = [[0,0]]
for i in range(m):
read.append(list(map(int, input().split())))
dp =[[0]*(n+1)for _ in range(m+1)]
for i in range(1, m+1):
for j in range(1,n+1):
d,p = read[i][0],read[i][1]
if j < d :
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-d]+p)
print(dp[m][n])
https://www.acmicpc.net/problem/16493
16493번: 최대 페이지 수
첫째 줄에 N(1 ≤ N ≤ 200)과 챕터의 수 M(1 ≤ M ≤ 20)이 주어진다. 둘째 줄부터 각 챕터 당 읽는데 소요되는 일 수와 페이지 수가 주어진다. 소요되는 일 수는 20보다 작거나 같은 자연수이고, 페이
www.acmicpc.net
첫 번째 책부터 시작해서 계속 최대의 경우를 택해야 한다. 그래서 2차원의 dp 배열이 필요하다.
'알고리즘 문제풀이' 카테고리의 다른 글
LCS2(백준 9252) (0) | 2024.01.03 |
---|---|
리그 오브 레전설 (Small)(백준 17271) (0) | 2024.01.02 |
수 고르기 (백준 20186) (0) | 2023.11.09 |
모두의 마블 (백준 12845) (1) | 2023.11.09 |
블로그2(백준 20365) (1) | 2023.11.09 |