[BOJ] 평범한 배낭

Date:

[BOJ] 평범한 배낭

Problem URL : 평범한 배낭

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>

using namespace std;

int N, K;
vector<pair<int, int>> item;
int dp[100][100001];


int main() {
	cin >> N >> K;
	memset(dp, 0, sizeof(dp));
	for (int i = 0; i < N; i++) {
		int W, V;
		cin >> W >> V;
		item.push_back({ W,V });
	}
	for (int j = 0; j <= K; j++) {
		if (item[0].first <= j) dp[0][j] = item[0].second;
	}

	for (int i = 1; i < N; i++) { //item 번호
		for (int j = 0; j <= K; j++) { //j: 무게(W)
			if (item[i].first <= j) {
				/* j만큼의 무게를 활용하는데 있어서 최선의 결과는 
				   i번째 item을 포함할때, 안할 때 두 경우 중 최댓값*/ 
				dp[i][j] = max(dp[i - 1][j], item[i].second + dp[i - 1][j - item[i].first]);
			} else {
				dp[i][j] = dp[i - 1][j];
			}
		}
	}

	cout << dp[N - 1][K] << "\n";
}

댓글