*白俊2109号-巡回講演


n校の大学が有名な学者を講演に招待した.各大学は、d日以内にスピーチに来れば、pのスピーチ料を支払うと通知した.講演料の最低価格を求めます.
#正解コード
これは前に解いた課題問題と似た脈絡を持っている.数日以内に解決すれば得点する.講演料の最安値が重要なので、講演料の降順で並ぶのは事実ですが、案件日アルゴリズムでは締め切り日は重要ではないようです.
大きな講演料から、締め切り付近で支払います.つまり、最大限遅らせてやれば、その前の締め切りの日程がいっぱいになれば、その時の講義の講演料はもっと高くなるということです.
だから、要するに、スケジュールを完成させると同時に、できるだけ多くの報酬を得ることができます.
import sys

input = sys.stdin.readline

n = int(input())
schedules = [0] * 10001
lectures = []
for _ in range(n):
    pay, day = map(int, input().split())
    lectures.append((pay, day))

lectures.sort(key=lambda x: (-x[0]))

for i in range(n):
  for j in range(lectures[i][1], 0, -1):
    if schedules[j] == 0:
      schedules[j] += lectures[i][0]
      break

print(sum(schedules))
#参照コード
似たような質問ですが、文章を書く理由は難易度が増すにつれてheapqを使う回数が増えていると感じたからです.優先順位キューとGriddyアルゴリズムを混ぜて多くの問題を出すようだ.
その中で、forゲート回りのリストで問題を解く場合、正解の原因は速度制限が緩いことで、ここの核心はheapqで問題を解くと、速度が9倍速いことです.
このコードは締め切り日の昇順に並べられています.
なぜなら、スピーチ代はheapが自分で手配し、急いでスピーチしてこそlen(p list)と比べることができるからだ.
次にheapqを順番に入れます.
加えられたスコアが持つ締め切り日とpリストの長さを比較すると、len(pリスト)>i[1]の場合は、日程が初日からi[1]でいっぱいになっている.では1つ空ける必要がありますが、heapppop()をすると、スピーチ料が最も少ないスピーチが流行し、p listにはいつも最大のスピーチ料があります.
import heapq

n = int(input())
lst = []
for i in range(n):
    lst.append(list(map(int, input().split())))

lst.sort(key=lambda x: (x[1]))
p_list = []

for i in lst:
    heapq.heappush(p_list, i[0])
    if (len(p_list) > i[1]):
        heapq.heappop(p_list)

print(sum(p_list))