公式
C - Reindeer and Sleigh 2 解説
by
C - Reindeer and Sleigh 2 解説
by
toam
ソリに乗るトナカイの集合を \(S\) とすると,条件は
\[\displaystyle \sum_{i\notin S}P_i\geq \sum_{i \in S}W_i\]
です.\(\displaystyle \sum_{i\notin S}P_i=\sum_{i=1}^N P_i - \sum_{i \in S}P_i\) を代入してして整理すると
\[\displaystyle \sum_{i\in S}(W_i+P_i)\leq \sum_{i=1}^N P_i\]
です.右辺は定数なので,\(W_i+P_i\) が小さいトナカイから貪欲にソリに乗せていくのが最適になります.
計算量は \(W_i+P_i\) でソートするのがボトルネックになり \(O(N\log N)\) です.
def solve():
n = int(input())
wp = [list(map(int, input().split())) for i in range(n)]
wp.sort(key=lambda x: x[0] + x[1]) # w_i + p_i でソート
sum_p = 0
for w, p in wp:
sum_p += p
res = 0
for i in range(n):
w, p = wp[i]
res += w + p
if sum_p < res:
print(i)
return
for _ in range(int(input())):
solve()
投稿日時:
最終更新:
