BOJ 8372 Conference - Rectification

BOJ 8372 Conference - Rectification

문제 링크:

문제 내용

컨퍼런스에서 mm개의 발표를 진행하려고 합니다. 발표는 한 번에 kk명이 들어갈 수 있는 발표장에서 진행되며, 발표장 1개를 빌리는 비용은 ss입니다. 하나의 발표를 듣고자 하는 사람의 수 xxkk보다 클 경우에는 발표장 xk\lceil \frac{x}{k} \rceil개를 빌려야 하며, 여러 개의 발표를 진행하기 위해서는 각각의 발표에 필요한 발표장의 개수의 합만큼을 빌려야 합니다.

ii번째 발표의 티켓 값은 cic_i입니다. ci×k2sc_i \times \lfloor \frac{k}{2} \rfloor \ge s임이 보장됩니다. 즉, 한 발표장에 들어갈 수 있는 사람 수의 절반 이상을 채우면 절대 손해를 보지 않습니다.

ll개의 단체가 발표를 듣기 위해 티켓을 예매했습니다. 이들 단체 중 일부의 예매를 취소하여 컨퍼런스가 얻는 이익이 최대가 되게 하세요. 어떤 단체 내에서 티켓의 일부만을 취소할 수는 없습니다.

입력

첫 줄에는 발표의 수 mm, 예약한 단체의 수 ll, 발표장의 크기 kk, 발표장 1개를 빌리는 비용 ss가 주어집니다. (1m1001 \le m \le 100, 2l1062 \le l \le 10^6, 2k4002 \le k \le 400, 1s10001 \le s \le 1000)

다음 줄에는 각 발표의 티켓 한 장의 가격 cic_i를 의미하는 mm개의 수가 주어집니다. (cisc_i \le s)

다음 ll줄에는 ii번째 단체가 예약한 발표 번호 pip_i와 티켓 수 rir_i가 주어집니다. (1pim1 \le p_i \le m, 1ri10001 \le r_i \le 1000)

출력

최대 이익을 출력합니다.

문제 풀이

스포일러

먼저, 각 발표에서 얻는 이득은 독립이므로, 하나의 발표에 대한 풀이를 찾은 다음 모든 답을 더해서 출력하면 됩니다.

ci×k2sc_i \times \lfloor \frac{k}{2} \rfloor \ge s라는 조건으로부터, 아무것도 취소하지 않았을 때 필요한 발표장의 수에서 2개 이상을 줄이는 것은 절대 이득이 될 수 없음을 알 수 있습니다. 따라서, 모든 예약을 그대로 받는 것과, 적당히 예약을 취소해서 발표장을 하나 줄이면서 최대한 적은 티켓을 취소하는 경우 2가지만을 비교하면 됩니다.

후자를 구하기 위해서는 냅색을 풀어야 합니다. lklk가 억 단위를 넘어가므로 그냥 냅색으로는 통과하기 어려울 수 있고, 가능한 티켓의 수만 알면 되므로 비트셋 냅색을 적용하는 것이 좋습니다.

Last updated on