본문 바로가기

코테

백준 12865 : 평범한 배낭 c++ 정답 (배열 사용)

1. 입력 n 과 k를 받음

2. n개 만큼 무게와 가치의 pair를 받음

3. dp배열을 nxk크기로 만듦

4. 물건을 가져가기로 선택했을 때 얻는 가치를 배열에 넣어줌, 안가져가면 이전 배열의 값을 넣어줌

5. dp[i][j] = max(dp[i-1][j], i위치의 가치 + dp[i-1][j-i의 무게])

삼성전자 갤럭시북 플렉스 노트북 NT930QCT-A38A (10세대 i3-1005G1 33.78cm WIN10) + 스마트 S펜, 포함, SSD 256GB, 8GBHP 엘리트 드래곤플라이 9JT76PA HSN-I32C (8세대 i5-8265U 33.7cm WIN10 UHD620), 포함, 512GB, 16GB레노버 노트북 아이디어패드 S340-15API (RYZEN5-3500U 39.6cm Radeon RX Vega 8), 128GB, 4GB, Free DOSApple 2019년 맥북 프로 터치바 16 16GB, 스페이스 그레이, i9-2.3GHz 8-core, SSD 1TB, 단품

https://github.com/o920/baekjoon/blob/master/12865.cpp

 

o920/baekjoon

Contribute to o920/baekjoon development by creating an account on GitHub.

github.com

#include <iostream>
#include <algorithm>
using namespace std;
pair<int, int> N[100];
int dp[100][100001];
int main() {
	int n, k;
	cin >> n >> k;
	for (int i = 0; i < n; i++) cin >> N[i].first >> N[i].second;

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

	cout << dp[n - 1][k] << endl;
}

(이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받을 수 있습니다.)