codingtest

12865번 - 평범한 배낭

2024-01-24
1분 분량
C++백준

문제 링크

문제 풀이 시간 : 1시간

문제 풀이

이 문제는 앞에서 블록 함께 쌓기를 풀면서 배웠던 배낭 문제 알고리즘을 사용하면 간단하게 풀 수 있는 문제였다.

최종 코드

c++
#include <iostream>
#include <vector>

using namespace std;

int dp[101][100001] = {0};

int main() {
    int n, k, w, v, sum;
    cin >> n >> k;
    vector<pair<int, int>> vec;
    for (int i = 1; i <= n; i++) {
        cin >> w >> v;
        vec.push_back({w, v});
    

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= k; j++) {
            if (vec[i - 1].first > j) {
                dp[i][j] = dp[i - 1][j];
            } else {
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - vec[i - 1].first] + vec[i - 1].second);
            }
        }
    }
    cout << dp[n][k];
}

함께 읽으면 좋은 글