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 |
Tags
- 공부 기록
- 코딩테스트실력진단
- 금 채굴하기
- 1931번
- 구름톤 트레이닝
- 구름톤 챌린지
- eager
- 코딩테스트
- 동적 계획법
- TagLibraryValidator
- Today I Learned
- @EntityGraph
- 최장 공통 부분수열
- 지연로딩
- 공부하기 싫어 #그래도 해야해
- 행복한 수열의 개수
- til
- 완전탐색
- 코드트리
- spring
- 멀록 조명등
- 코드트리 챌린지
- JPA
- 회의실 배정
- 1005 #ACM craft #백준
- 백준 #1010 #다리놓기
- 즉시로딩
- 백준
- 구름톤
- IT 좀 아는 사람
Archives
- Today
- Total
화분
[12865]평범한 배낭 본문
문제 출처 : https://www.acmicpc.net/problem/12865
배낭 문제는 다이나믹 프로그래밍의 대표적인 문제 중 하나이다. 대학교 알고리즘 수업을 들을 때 풀어봤던 문제라서 풀이 전략을 떠올리는 것은 어렵지 않았으나 세부적인 코드를 짜는데 시간이 조금 걸렸다. 나 같은 경우 2차원 배열의 테이블을 만들어서 풀었는데 이같은 풀이 방법으로 더 간단히 짤 수도 있을거라 본다. 한편 백준에서 다른 사람들이 푼 걸 보면 가끔 말도 안되게 간단하게 풀어서 제출하는 걸 심심찮게 보는데 이 문제도 그렇다.
동적 프로그래밍의 '프로그래밍'의 뜻은 우리가 익히 알고 있는 뜻이 아닌 표(테이블)을 의미한다. 몇차원이든 표에 기록하고 그 기록들을 참조해서 문제를 해결해나간다. 문제를 푸는 방식에는 보텀업(bottom up)과 탑다운(top down)방식이 존재하고 보통 보텀업 방식으로 푼다.
이 문제의 경우 행의 크기는 물건의 개수, 열의 크기는 최대로 담을 수 있는 총 무게만큼 정해서 만든다. 각 공간에는 그 차수의 물건까지 담았을때 담을 수 있는 물건들의 무게별 최대 '가치'를 저장한다. 가령 1번째 물건의 무게가 3 2번째 물건의 무게가 2일 경우 2행의 2열, 3열, 5열에 해당 무게(물건들의 합)의 최대 가치가 저장된다.
#include <iostream>
int table[101][100001];
using namespace std;
int main()
{
int N = 0, K = 0;
int weight[101];
int worth[101];
cin >> N >> K;
for(int i = 1; i <= N; i++)
{
cin >> weight[i] >> worth[i];
}
table[1][weight[1]] = worth[1];
for(int i = 2; i <= N; i++)
{
for(int j = 1; j <= K; j++)
{
if(table[i-1][j] > 0)
{
if(table[i][j] < table[i-1][j])
table[i][j] = table[i-1][j];
int temp = j + weight[i];
if(temp <= K)
{
if(table[i-1][temp] < table[i-1][j] + worth[i])
table[i][temp] = table[i-1][j] + worth[i];
}
}
}
if(table[i][weight[i]] < worth[i])
table[i][weight[i]] = worth[i];
}
int max = 0;
for(int i = 1; i <= K; i++)
{
if(max < table[N][i])
max = table[N][i];
}
cout << max << endl;
}
'Study > CODINGTEST' 카테고리의 다른 글
[구름톤 챌린지 5일차] 이진수 정렬 (0) | 2023.08.19 |
---|---|
[9251]LCS (0) | 2022.02.16 |
[1005]ACM craft (0) | 2022.02.12 |
[1010]다리 놓기 (0) | 2022.02.12 |
[1904]01타일 풀이 (0) | 2022.01.10 |