Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 다음소수
- 루트서명
- 4134번
- 백준 c++ 24479번
- BFS
- C++
- 백준
- 11286번
- 그리기 연산
- 애니메이션
- 랜더링 파이프라인
- 2075번
- WinAPI
- directx12 그리기 연산2
- lis응용
- 다익스트라
- unrealengine
- Unreal
- 백준 1260 c++
- dx12 정리
- 바이토닉 수열
- 2d 박스충돌
- dx12
- 백준 24444 c++
- 드래곤플라이트 모작
- 24779
- 뱀과사다리게임
- 2565번
- Perforce
- DirectX12
Archives
- Today
- Total
game-1 님의 블로그
[백준] 12865번 c++ 평범한 배낭 본문


풀이)
이 문제는 0-1 배낭 문제로 이를 해결하기위해 물건을 하나씩 고려하며 배낭 용량에 따른 최대 가치를 계산합니다.

역순으로 탐색하면서, 물건을 넣지 않았을 때는 dp[w]이며,
물건을 넣었을 때는 dp[w-weight[i]] +value[i] 해당 물건의 무게를 빼주고, 가치를 더해주는 방식입니다.
코드)
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n, k;
cin >> n >> k;
vector<int>weight(n+1);
vector<int>value(n+1);
vector<int>dp(k+1, 0); // k무게에서의 최대가치
for (int i = 1; i <= n; ++i) {
cin >> weight[i] >> value[i];
}
for (int i = 1; i <= n; ++i) {
for (int w = k; w >= weight[i]; w--) {
dp[w] = max(dp[w], dp[w - weight[i]] + value[i]);
}
}
cout << dp[k];
}

'백준 문제풀이' 카테고리의 다른 글
| [백준] 1504번 C++ 특정한 최단 경로 (0) | 2025.02.05 |
|---|---|
| [백준] 2075번 N번째 큰 수 C++ (2) | 2025.02.03 |
| [백준]9251번 C++ , LCS(최장 공통 부분 수열) (0) | 2025.01.22 |
| [백준] 11725번 C++ 트리의 부모 찾기 (0) | 2025.01.21 |
| [백준] 3273번 두 수의 합 C++ (1) | 2025.01.18 |