สมมติว่าเรามีรายการ N ซึ่งทำเครื่องหมายเป็น 0, 1, 2, …, N-1 จากนั้น เราได้รับรายการ 2 มิติของขนาด S ที่เรียกว่าชุด ที่นี่ เราสามารถซื้อชุดที่ i-th สำหรับชุดราคา[i,2] และเราได้รับทุกรายการระหว่างชุด[i, 0] ถึงชุด[i, 1] นอกจากนี้เรายังมีรายการของขนาด N ที่เรียกว่าการนำออก ซึ่งเราสามารถทิ้งองค์ประกอบที่ i-th จำนวน 1 อินสแตนซ์สำหรับการนำราคาออก[i] ดังนั้น เราต้องค้นหาต้นทุนขั้นต่ำในการซื้ออย่างแม่นยำในทุกองค์ประกอบตั้งแต่ 0 ถึง N-1 หรือผลลัพธ์จะเป็น -1 หากไม่สามารถทำได้
ดังนั้น ถ้าอินพุตเป็นเหมือนชุด =[ [0, 4, 4], [0, 5, 12], [2, 6, 9], [4, 8, 10]]
การลบ =[2, 5, 4, 6, 8] จากนั้นผลลัพธ์จะเป็น 4
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
N :=ขนาดของการลบ
-
กราฟ :=เมทริกซ์ใหม่สำหรับขนาด (N + 1) x (N + 1)
-
สำหรับแต่ละ s, e, w เป็นเซต, ทำ
-
เพิ่ม [e+1, w] ลงในกราฟ[s]
-
-
สำหรับแต่ละ i, r ในดัชนี i และ item r ในการลบ ทำ
-
เพิ่ม [i, r] ลงในกราฟ[i + 1]
-
-
pq :=ฮีปใหม่
-
dist :=แผนที่ใหม่
-
dist[0] :=0
-
ในขณะที่ pq ไม่ว่างเปล่าให้ทำ
-
d, e :=ลบรายการที่เล็กที่สุดออกจาก heap pq
-
ถ้า dist[e]
-
ดำเนินการซ้ำต่อไป
-
-
ถ้า e เท่ากับ N แล้ว
-
กลับ d
-
-
สำหรับแต่ละ nei, w ในกราฟ[e], ทำ
-
d2 :=d + w
-
ถ้า d2
-
dist[nei] :=d2
-
เพิ่ม [d2, nei] ไปยัง pq
-
-
-
-
กลับ -1
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
นำเข้า heapqfrom คอลเลกชันนำเข้า defaultdictclass โซลูชัน:def แก้ปัญหา (ตัวเอง, ชุด, การลบ):N =len (การลบ) กราฟ =[[] สำหรับ _ ในช่วง (N + 1)] สำหรับ s, e, w ในชุด:graph[s].append([e + 1, w]) for i, r in enumerate(removals):graph[i + 1].append([i, r]) pq =[[0, 0]] dist =defaultdict(แลมบ์ดา:float("inf")) dist[0] =0 ในขณะที่ pq:d, e =heapq.heappop(pq) if dist[e] อินพุต
[[0, 4, 4],[0, 5, 12],[2, 6, 9],[4, 8, 10]], [2, 5, 4, 6, 8]ก่อน> ผลลัพธ์
4