문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

8036 : 표준 배낭 문제

•시간제한: 2.000 S •메모리제한: 256 MB •제출: 0 •통과: 0 •만든사람: suakii

8036 : 표준 배낭 문제

시간 2.000s · 메모리 256MB · 제출 0 · 정답 0

문제 설명

배낭의 최대 허용 크기 $S$와 $N$개의 물건이 주어집니다. 각 물건 $i$는 크기 $v_i$와 가치 $c_i$를 가집니다. 배낭의 허용 크기를 초과하지 않으면서 배낭에 담을 수 있는 물건들의 가치 합의 최대값을 구하는 프로그램을 작성하시오. 단, 각 물건은 단 하나씩만 존재합니다.



[제약 조건]
• $1 \le S \le 2{,}000$ (배낭 용량)
• $1 \le N \le 2{,}000$ (물건 개수)
• $1 \le v_i, c_i \le 2{,}000$

입력 설명

첫째 줄에 배낭의 용량 $S$와 물건의 개수 $N$이 공백으로 구분되어 주어집니다. ($1 \le S \le 2000$, $1 \le N \le 2000$)
다음 $N$개의 줄에 각 물건의 크기 $v_i$와 가치 $c_i$가 공백으로 구분되어 주어집니다. ($1 \le v_i, c_i \le 2000$)

출력 설명

담을 수 있는 물건들의 최대 가치 합을 출력합니다.

입력 예시
COPY
복사되었습니다!

4 5
1 8
2 4
3 0
2 5
2 3

출력 예시
COPY
복사되었습니다!

13

도움

가장 기본적인 0-1 배낭 문제(0-1 Knapsack Problem)입니다. 1차원 DP 테이블 $dp[j]$ ($0 \le j \le S$)를 0으로 초기화한 뒤, 각 물건의 크기 $v$와 가치 $c$에 대해 용량 $j$를 큰 값($S$)부터 $v$까지 역순으로 순회하며 $dp[j] = \max(dp[j], dp[j-v] + c)$로 갱신하면 됩니다. 시간 복잡도는 $O(N \times S)$ 입니다.

출처/분류

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘