BOJ 15759 - Talent Show

Knapsack DP인건 어렵지 않게 알 수 있고, 유리수를 다뤄야 한다는 점이 까다롭다.
또한, W 에도 제한이 걸려 있어서 O(NW)로 DP를 돌릴 때, W를 넘어가는 시점이 있다면 따로 최대값을 업데이트만 해주고 DP 테이블을 건들지 않는 방식으로 처리해줘야 한다.
witi를 기준으로 내림차순 정렬을 한 다음에 DP를 돌려야 한다.
이게 왜그런지 모르겠다.
정해
에디토리얼
이분탐색을 사용한다.
현재 x가 가능한지에 대해 판단하고 있고 골라진 소들의 집합이 S라고 할 때,
∑i∈Swi∑i∈Sti≥x, ∑i∈Swi≥W 여야 한다.
∑i∈Swi∑i∈Sti≥xi∈S∑(ti−xwi)≥0
으로 표현될 수 있고, vi=ti−xwi 로 따졌을 때
vi 들의 값의 합이 0 이 되는 조합이 있고 그 때 무게의 합이 W 이상이라면 x가 가능한 것이므로 이를 knapsack 으로 판별해줄 수 있다.
따라서 O(wn)이 걸리고 이분탐색까지 O(wnlogt) 가 걸린다.
Comments