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
- 르탄즈5기
- 환경교육봉사
- 코드잇강의추천
- DB마이저널
- DB김준기문화재단
- 내일배움캠프사전캠프
- 코드잇TIL
- 스파르타코딩클럽
- 앱개발강의
- 티스토리챌린지
- 르탄즈
- DB드림리더장학생
- 리액트네이티브
- 코드잇앰배서더
- 코딩공부
- 알고리즘
- 내일배움캠프
- 독서활동
- 자바스크립트
- 혼공단
- 오늘도코드잇
- ReactNative
- 혼공컴운
- 앱개발부트캠프
- 혼공단JS
- 코드잇
- 오블완
- c++헤더
- js
- GIT
Archives
- Today
- Total
axnuo
[Algorithm/BOJ] 12865.평범한 배낭 C++ : DP, Knapsack Problem 본문
배낭 문제 즉, Knapsack Problem은 물건의 갯수와 배낭의 최대 용량, 각 아이템의 무게와 가치를 입력받고 최대 가치를 구하는 문제이다.
이는 DP, 백트래킹, Branch and Bound 등등... 풀 수 있는 방법이 굉장히 다양한데 이번에는 DP로 접근하는 방식에 대해 다뤄보려고 한다.
DP는 부분 문제를 바탕으로 결과값을 도출하는 방식이다...
DP 자체에 대한 글은 나중에 다뤄보도록 하고 아무래도 혼자 점화식을 구상하는 능력이 매우매우 떨어지는 것 같고 이번에도 다른 분의 글을 바탕으로 이해하며 코드를 작성해보았다.


배낭의 무게를 임시로 설정해서 각 무게에 해당할 때 마다 최대 가치를 저장하는 부분이 중요하다고 생각했다...
#include <iostream>
using namespace std;
int N, K, W[101], V[101], dp[101][100001];
int main(){
cin>> N >> K;
for(int i=1; i<=N; i++){
cin >> W[i] >> V[i];
}
for(int i=0; i<K; i++){
dp[0][i] = 0;
}
for(int i=0; i<N; i++){
dp[i][0] = 0;
}
for(int i=1; i<=N; i++){
for(int j=1; j<=K; j++){
if(W[i]>j) dp[i][j] = dp[i-1][j];
else dp[i][j]=max(dp[i-1][j], dp[i-1][j-W[i]]+V[i]);
}
}
cout << dp[N][K] << '\n';
}
참고!
'Algorithm > BOJ' 카테고리의 다른 글
| [Algorithm/BOJ] 1629 곱셈 C++ : 분할정복 (1) | 2024.01.11 |
|---|