[C++] BOJ 16493번 : 최대 페이지 수

ㅎㅎ·2023년 11월 15일
0

BOJ

목록 보기
64/65

정답 코드

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <cmath>
#define ll long long
using namespace std;

int dp[21][201]; // 챕터 수, 남은 기간
int dates[21]; // 챕터의 소요일 수 weight
int pages[21]; // 챕터의 페이지 수 value

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

    int n, m; // 남은 기간, 챕터 수

    cin >> n >> m;
    for (int i = 1; i <= m; i++) {
        cin >> dates[i] >> pages[i];

        for (int j = 1; j <= n; j++) {
            if (j - dates[i] >= 0) { dp[i][j] = max(dp[i - 1][j], (dp[i - 1][j - dates[i]] + pages[i])); }
            else { dp[i][j] = dp[i - 1][j]; }
        }
    }

    cout << dp[m][n];

    return 0;
}

왜 이렇게 하면 안되는 거지?

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <cmath>
#define ll long long
using namespace std;

int dp[21][201]; // 챕터 수, 남은 기간
int dates[21]; // 챕터의 소요일 수 weight
int pages[21]; // 챕터의 페이지 수 value

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

    int n, m; // 남은 기간, 챕터 수

    cin >> n >> m;
    for (int i = 1; i <= m; i++) {
        cin >> dates[i] >> pages[i]; // 

        for (int j = 1; j <= n; j++) {
            if (dates[i] > n) { dp[i][j] = dp[i - 1][j]; }
            else { dp[i][j] = max( dp[i - 1][j], (dp[i - 1][j - dates[i]] + pages[i]) ); }
        }
    }

    cout << dp[m][n];

    return 0;
}
profile
Backend

0개의 댓글