배낭 문제
시간 제한3초메모리 제한512 MB
n개 물건의 무게와 가치, 그리고 용량 W가 주어질 때 총 무게가 W를 넘지 않는 부분집합의 가치 합의 최댓값을 구합니다.
문제
아래 배낭 문제를 푸시오. 무게는 무작위 필터로 평활화되어 있습니다.
To fit the best stuff in a sack with limits on what you can pack recursion will do if memoized too but DP puts less on the stack.
개의 원소 과 용량 가 주어진다. 다음 값을 구하라.
여기서 은 1부터 까지의 정수 리스트이다.
, , 을 만족한다고 보장한다. 또한 무게 는 아래 설명대로 평활화되어 있다고 보장한다.
먼저 위 제약을 만족하는 인스턴스를 만든다. 그다음 무작위 필터를 적용한다. 를 원소 중 가장 큰 무게라고 하자. 각 무게는 다음과 같이 갱신된다.
여기서 는 범위의 균등 난수 정수를 돌려준다. 이 필터는 에만 적용되며 나 다른 값은 바꾸지 않는다.
입력
첫 줄에 두 정수 과 가 공백으로 구분되어 주어진다. 이어지는 개의 줄에는 각각 두 정수 와 가 공백으로 구분되어 주어진다. 무게는 위에서 설명한 방식으로 만들어진다. 먼저 제약을 만족하는 인스턴스를 고르고, 그 뒤에 평활화를 적용한다. 프로그램이 입력으로 받는 값은 평활화를 거친 결과이다.
출력
주어진 배낭 문제의 값을 한 줄에 출력하라.