E D R , A S I H C RSS

Knapsack

about

당신은 ZP 과일가게 주인입니다.

어느날, 커다란 주머니를 든 손님 찾아 왔습니다. 그리고

" 주머니에 넣을 수 있을 만큼 과일을 담아 주세요."

렇게 말했습니다. 그러나 주머니의 공간 무제한은 아닙니다.

당신 돈을 가장 많 받기 위해서는 어떻게 해야 할까요?

예를 들어 과일의 크기와 가격 다음과 같다고 합시다.



과일크기가격
사과3800
41200
수박125000
자두1300
바나나62000

여기서 주머니의 크기가 50라고 합시다.

어떻게 팔아야 가장 많은 돈을 벌 수 있을까?

그리고 그 때 버는 돈은 얼마인지 구하는 프로그램을 작성하세요.

(단, 담는 순서는 관계 없습니다.)



specfication

력 예

50

사과 3 800

배 4 1200

수박 12 5000

자두 1 300

바나나 6 2000


력 예

수박 (12)을(를) 담았습니다. 제 남은 공간은 38입니다.

수박 (12)을(를) 담았습니다. 제 남은 공간은 26입니다.

수박 (12)을(를) 담았습니다. 제 남은 공간은 14입니다.

수박 (12)을(를) 담았습니다. 제 남은 공간은 2입니다.

자두 (1)을(를) 담았습니다. 제 남은 공간은 1입니다.

자두 (1)을(를) 담았습니다. 제 남은 공간은 0입니다.

가격 = 20600


처음부터 단박에 문제를 푸는 것보다 조금 더 제한적고 쉬운 문제에서 일반적고 어려운 문제로 점진적으로 진행해 나가는 것은 어떨까요. NoSmok:HowToSolveIt에서 소개하는 문제 해결 테크닉 중 하나기도 하죠. 훨씬 더 높은 교육적 효과를 기대할 수 있지 않을까 합니다.

예컨대, 다음의 순서가 가능하겠죠:
  1. weighted, 0-1 knapsack problem -> find the exact match
  2. weighted, unbounded knapsack problem -> find the exact match
  3. weighted/valued, unbounded knapsack problem -> maximize the value not exceeding the weight limit

그리고 누군가가 만든 프로그램 옳다는 것을 테스트하기 위해서는 를 자동화하는 것 편할 것고, 것을 위해서는 인풋과 아웃풋을 좀 단순화하는 것 좋지 않을까 합니다. ICPC의 문제들을 구경해 보세요.

--JuNe


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:36
Processing time 0.0322 sec