[Baekjoon] 1202. ジュエリー泥棒
5346 ワード
📚 質問する
https://www.acmicpc.net/problem/1202
📖 に答える
最大ヒップホップ、すなわち優先キューを使用して問題を解決します.
宝石とリュックサックは重量順に並んでいます.
そして小さなバッグから1つずつ巡り、大きなバッグや小さな宝石よりも価値を最大化します.
なければ入れないが,いくつかあればいくつか入れなさい.
詰め終わったら、バッグから価値のあるものを取り出して、次のバッグを探します.
バッグの重さが小さいことから、最大の価値を出します.
📒 コード#コード#
import heapq
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
jams = sorted([list(map(int, input().split())) for _ in range(n)]) # 무게 순으로 정렬
bags = sorted([int(input()) for _ in range(k)]) # 무게 순으로 정렬
heap = [] # 가치가 큰 것부터 담을 최대 힙
s = 0
total = 0
for bag in bags: # 무게가 작은 가방부터 순회
while s < len(jams) and bag >= jams[s][0]: # 현재 가방보다 무게가 작거나 같은 보석들을 순회
heapq.heappush(heap, -jams[s][1]) # heap에 보석의 가치를 큰 순서대로 담는다.
s += 1
if heap: # 힙에 가치가 가장 큰 것부터 가방 하나당 하나씩 꺼낸다.
total += -heapq.heappop(heap)
print(total)
🔍 結果
Reference
この問題について([Baekjoon] 1202. ジュエリー泥棒), 我々は、より多くの情報をここで見つけました https://velog.io/@yunhlim/Baekjoon-1202.-보석-도둑-G2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol