일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 카카오 코테 메뉴리뉴얼
- AI경량화
- 로지스틱 최대우도
- 프로그래머스 스타수열
- 딥러닝
- 프로그래머스광고삽입
- 스타수열
- 2차원동전뒤집기
- 딥러닝파라미터
- 모델경량화
- 딥러닝학습
- 확률과우도
- 인공지능 경진대회
- 자율성장 인공지능
- 데이터축소
- 프로그래머스 누적합
- 과적합방지
- 머신러닝 학습 검증
- 광고삽입 파이썬
- k겹 교차검증
- 프로그래머스 2차원동전뒤집기
- 카카오 메뉴리뉴얼
- 비트마스킹
- 딥러닝 가중치 갱신
- 프로그래머스
- 메뉴리뉴얼 파이썬
- 스타수열 파이썬
- 프로그래머스 2차원동전뒤집기 파이썬
- MLE
- 인공신경망 학습
- Today
- Total
머신러닝 개발자의 러닝머신
12865: 평범한 배낭 (Python) 본문
<문제 유형> : DP(Dynamic Programming)
<구현해야 하는 것>
-1~n번 물건을 순차적으로 살펴보면서 무게 1~k 까지 넣을 수 있는 최대의 가치를 갱신하면서 테이블을 작성해나간다.
-DP 테이블
· row: 1~n 물건, col: 1~k 배낭에 넣을 수 있는 무게
· (1+n)*(1+k) 사이즈의 2D 테이블
· dp[i][j]의 의미: i번째 물건까지 살펴본 결과 가방에 j의 무게만큼 넣을 수 있을 때의 최대의 가치
· i번째 물건의 무게를 w, 가치를 v 라고 할 때,
dp[i][j] = max( 물건 i를 포함시킬 경우 가방에 j의 무게를 넣을 수 있을때의 가치 ,
물건 i가 포함되지 않고 가방에 j의 무게를 넣을 수 있을 때의 가치 )
(이때, 물건 i가 포함될때 가방에 j의 무게를 넣을 수 있을 때는
( i-1)번째 까지의 물건을 살펴봤을 때 가방에 (j-w)의 무게를 넣을 수 있을때의 가치 + v 가 가방의 가치가 된다)
☞ 이를 수식으로 나타내면,,
dp[i][j] = max( dp[ i-1][ j-w] + v, dp[ i-1][ j])
※주의 사항: 물건의 무게가 가방에 넣을 수 있는 무게보다 작거나 같은 경우에만 위의 식으로 dp 테이블을 업데이트 해준다, 물건의 무게가 가방에 넣을 수 있는 무게보다 큰 경우에는 그 물건은 넣을 수 없으므로
dp[i][j] = dp[i-1][j] 임을 유의하자
- 모든 물건을 살펴본 후 , 최종 출력은 dp[ n][ k]가 된다.
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
things = [()] #각 물건의 (weight, value)이 담겨있음
for _ in range(n):
w, v = map(int, input().split())
things.append((w, v))
# DP- row: 물건 1~k 까지 살펴본 배낭 무게에 넣을 수 있는 최대의 가치 값 , col: 배낭에 넣는 물건의 무게
# DP: (n+1)*(1+k) 2D-table
dp = [[0 for _ in range(k+1)] for _ in range(n+1)]
for i in range(1, n+1):
w, v = things[i]
for bw in range(1, k+1):
if bw >= w:
dp[i][bw] = max(dp[i-1][bw-w]+v, dp[i-1][bw])
else: #배낭에 넣을 수 있는 무게보다 물건의 무게가 무거운 경우 !!이거 빼먹음!!
dp[i][bw] = dp[i-1][bw]
print(dp[n][k])
'알고리즘 > boj' 카테고리의 다른 글
1655: 가운데를 말해요 (Python) (0) | 2022.07.28 |
---|---|
15685: 드래곤 커브 (Python) (0) | 2022.07.28 |
14891: 톱니바퀴 (Python) (0) | 2022.07.27 |
16639: 괄호 추가하기 3 (0) | 2022.07.16 |
18500 미네랄2 (0) | 2022.07.16 |