halang-log
💡 PS

[BOJ] 16493 최대 페이지 수

date
Feb 12, 2022
slug
boj-16493
author
status
Public
tags
PS
DP
summary
최대 페이지 수에 대한 풀이입니다.
type
Post
thumbnail
category
💡 PS
updatedAt
Aug 3, 2023 08:51 AM
언어

문제

풀이

dp문제이다. 나는 상태공간을 dp[chap][d] = 현재 chap 챕터위치에 있고 d요일 동안 읽었을 때 읽을 수 있는 최대 페이지 수로 설정했다. chap가 m일 때 d가 n보다 크다면 절대 답이 되어선 안되므로 적당히 작은 값을 리턴해주고 아닐 경우 0을 리턴해준다.
처음엔 if (d > n) return -1e9; 코드를 빼먹었었는데 WA가 났다. chap < m인데 d가 n보다 커졌을 때 dp[chap][d]를 조회하려 하니 문제가 생겨서 그런 것 같다.

코드

#include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef pair<int, int> pii; pii arr[200]; int n, m; int dp[20][201]; int go(int chap, int d) { if (chap == m) { if (d > n) return -1e9; return 0; } if (d > n) return -1e9; if (dp[chap][d] != -1) return dp[chap][d]; int ret = 0; ret += max(go(chap+1, d+arr[chap].first) + arr[chap].second, go(chap+1, d)); return dp[chap][d] = ret; } int main() { memset(dp, -1, sizeof(dp)); scanf("%d %d", &n, &m); for(int i = 0; i < m; i++) { scanf("%d %d", &arr[i].first, &arr[i].second); } printf("%d", go(0, 0)); }