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
- 조조래빗
- 재즈의 탄생
- 초창기 재즈
- Pan's Labyrinth
- 가여운 것들
- tlqkf
- 재즈
- JOJO RABBIT
- 범죄도시
- 블루스
- 1로 만들기
- 요르고스 란티모스
- 라라랜드
- 흑인 영가
- 백준 12865
- Poor things
- 페일맨
- 디즈니플러스
- CS231n
- jazz
- 가여운것들
- 백준 10814
- 백준 30958
- 스콧 조플린
- 백준 2579
- 래그타임
- 범죄도시2
- 백준
- DP
- 델 토르
Archives
- Today
- Total
빙수의 팝콘
[백준] 12865번 평범한 배낭 본문
문제 설명
첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000)가 주어진다.
입력으로 주어지는 모든 수는 정수이다.
출력
한 줄에 배낭에 넣을 수 있는 물건들의 가치합의 최댓값을 출력한다.
입력 예시
4 7
6 13
4 8
3 6
5 12
출력 예시
14
전형적인 dp 문제이다. 수업시간에도 배웠던 문제라 아주 쉽게 해결할거라 생각했는데... 아직 실력이 많이 부족한가보다ㅠㅠ 첨에 repetition이 가능한 문제인줄 알았는데.. 잘 읽어보면 알겠지만 이 문제는 repetition이 불가능한 0-1 knapsack problem이다.
코드를 바로 보고 싶지 않다면 먼저 아래 pseudocode를 보고 작성해보자.
작성한 코드는 아래와 같다.
n, k = map(int, input().split())
weight = []
value = []
for i in range(n):
w, v = map(int, input().split())
weight.append(w)
value.append(v)
# knapsack with repetition
max_v = [[0] * (n+1) for i in range(k+1)]
for j in range(n):
for w in range(k):
if(weight[j] > w+1):
max_v[w+1][j+1] = max_v[w+1][j]
else:
max_v[w+1][j+1] = max(max_v[w + 1- weight[j]][j] + value[j], max_v[w+1][j])
print(max_v[k][n])
'빙수의 coding > 백준' 카테고리의 다른 글
[백준] 11053번 가장 긴 증가하는 부분 수열 (1) | 2023.12.21 |
---|---|
[백준] 1463번 1로 만들기 (1) | 2023.12.21 |
[백준] 2579번 계단 오르기 (0) | 2023.12.20 |
[백준] 10814번 나이순 정렬 (1) | 2023.12.20 |
[백준] 30958번 서울사이버대학을 다니고 (0) | 2023.12.20 |