[12865] 평범한 배낭 (냅색 알고리즘)

2023. 5. 14. 02:29·Coding Test/DP
728x90
 

12865번: 평범한 배낭

첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000)

www.acmicpc.net

 

분석

가방에 최대 Mkg 까지 담을 수 있을 때,

dp[i][j] = 가방에 담은 물건의 무게 합이 i일 때, 처음 j개의 물건 중 담을 수 있는 최대 가치 ( 1 < i <=M)

 

1) i가 현재 물건의 무게 w보다 작을 때

  • 현재 물건을 담을 수 없으므로 이전의 값을 복사
  • dp[i][j] = dp[i][j-1]

2) i가 현재 물건의 무게 w와 같거나 클 때

  • 현재 물건을 담을 수 있음
  • 물건을 담았을 때와 담지 않았을 때의 가치 중 더 큰 값
  • dp[i][j] = max(dp[i-w][j-1]+v, dp[i][j-1])
  • dp[i][j] = max(현재 물건 가치 + dp[이전 물건][현재 가방 무게 - 현재 물건 무게], dp[이전 물건][현재 가방 무게])

 

풀이

"""
준서가 여행에 필요하다고 생각하는 N개의 물건이 있다. 각 물건은 무게 W와 가치 V를 가지는데
아직 행군을 해본 적이 없는 준서는 최대 K만큼의 무게만을 넣을 수 있는 배낭만 들고 다닐 수 있다.

준서가 최대한 즐거운 여행을 하기 위해 배낭에 넣을 수 있는 물건들의 가치의 최댓값을 알려주자.

첫 줄에 물품의 수 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
"""
import sys
input=sys.stdin.readline

# 물품수, 버틸무게
n, k = map(int, input().split())
dp = [[0] * (k + 1) for _ in range(n + 1)]

arr = [(0, 0)]
for _ in range(n):
    w, v = map(int, input().split())
    arr.append((w, v))

for i in range(1, n+1):   # 물건 하나씩
    for j in range(1, k+1):  # 1~k무게까지 표 작성
        w = arr[i][0]
        v = arr[i][1]
        if j < w:   # 해당 물건이 더 큰 경우
            dp[i][j] = dp[i-1][j] # 이전가치를  그대로 사용
        else:   # 해당 물건이 들어가는 크기인 경우
            #이전 최대가치를 사용하는 것보다 이전걸 빼고 현재물건을 넣는게 더 좋다면 넣어줌
            dp[i][j] = max(dp[i-1][j-w]+v, dp[i-1][j])

print(dp[n][k])

 

 

 

 

 

728x90
저작자표시 비영리 변경금지 (새창열림)
'Coding Test/DP' 카테고리의 다른 글
  • 최대점수 구하기(냅색 알고리즘)
  • 동전 교환 (DP)
  • 가방 문제 (냅색 알고리즘)
  • 알리바바와 40인의 도둑 (Bottom-Up, Top-Down)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    트리
    그래프
    LIS
    파이썬
    BFS
    최소신장트리
    조합
    자료구조
    알고리즘
    재귀
    그리디
    구간합
    큐
    구현
    월간코드챌린지
    플로이드워셜
    DP
    덱
    이분탐색
    스택
    프로그래머스
    Algorithm
    힙
    DFS
    동적계획법
    최단거리
    정렬
    백준
    다익스트라
    최대공약수
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[12865] 평범한 배낭 (냅색 알고리즘)
상단으로

티스토리툴바