박스 채우기
시간 제한2초메모리 제한128 MB
가로 세로 높이가 주어진 직육면체를 종류별 개수가 제한된 2의 거듭제곱 크기의 정육면체들로 정확히 채우는 최소 블록 수를 구하고, 불가능하면 -1을 출력합니다.
문제
길이가 length, 너비가 width, 높이가 height인 직육면체 상자가 있다. 이 상자를 정육면체 모양의 큐브들로 빈틈없이 채우려고 한다.
각 큐브의 한 변의 길이는 1, 2, 4, 8, ...처럼 2의 거듭제곱이다. 사용할 수 있는 큐브의 크기와 개수가 주어질 때, 상자를 모두 채우는 데 필요한 큐브 수의 최솟값을 구하라.
입력
첫째 줄에 세 자연수 length width height가 주어진다.
둘째 줄에 사용할 수 있는 큐브 종류의 수 N이 주어진다.
다음 N개의 줄에는 큐브의 종류 Ai와 개수 Bi가 Ai가 증가하는 순서대로 주어진다. 종류 Ai는 그 큐브의 한 변의 길이가 2^Ai임을 뜻한다.
출력
상자를 채우는 데 필요한 큐브 개수의 최솟값을 출력한다. 상자를 빈틈없이 채울 수 없다면 -1을 출력한다.
제한
1 <= length, width, height <= 10^61 <= N <= 200 <= Ai < 200 <= Bi <= 10^6Ai != Aj(i != j)