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

8032 : 책 보내기

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

8032 : 책 보내기

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

문제 설명

서점에 $N$권의 책이 있습니다. 각 책 $i$의 가격은 $h_i$원이고 페이지 수는 $s_i$페이지입니다. 당신은 최대 $X$원만큼의 예산을 가지고 있습니다. 각 책은 최대 한 권씩만 구매할 수 있다고 할 때, 예산 범위 내에서 구매할 수 있는 책들의 최대 페이지 수 합을 구하는 프로그램을 작성하시오.



[제약 조건]
• $1 \le N \le 1{,}000$
• $1 \le X \le 10^5$
• $1 \le h_i \le 1{,}000$
• $1 \le s_i \le 1{,}000$

입력 설명

첫째 줄에 책의 수 $N$과 최대 예산 $X$가 공백으로 구분되어 주어집니다. ($1 \le N \le 1000$, $1 \le X \le 10^5$)
둘째 줄에 각 책의 가격 $h_1, h_2, \ldots, h_N$이 공백으로 구분되어 주어집니다. ($1 \le h_i \le 1000$)
셋째 줄에 각 책의 페이지 수 $s_1, s_2, \ldots, s_N$이 공백으로 구분되어 주어집니다. ($1 \le s_i \le 1000$)

출력 설명

구매할 수 있는 책들의 최대 페이지 수의 합을 출력합니다.

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

4 10
4 8 5 3
5 12 8 1

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

13

도움

전형적인 0-1 배낭 문제(0-1 Knapsack Problem)입니다. 1차원 DP 테이블 $dp[j]$ ($0 \le j \le X$)를 사용해 공간 복잡도를 최적화할 수 있습니다. 각 책 $i$를 하나씩 선택하면서, 예산 $j$를 큰 값($X$)부터 책 가격 $h_i$까지 역순으로 돌며 $dp[j] = \max(dp[j], dp[j-h_i] + s_i)$로 업데이트하면 중복 구매 없이 최대 페이지를 계산할 수 있습니다.

출처/분류

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