Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm ra chi phí tối thiểu để mua tất cả bằng Python

Giả sử, chúng ta có N mục, được đánh dấu là 0, 1, 2,…, N-1. Sau đó, chúng ta được cung cấp một danh sách 2D có kích thước S được gọi là các tập hợp. Tại đây, chúng tôi có thể mua bộ thứ i với các bộ giá [i, 2] và chúng tôi nhận được mọi mặt hàng giữa các bộ [i, 0] đến các bộ [i, 1]. Ngoài ra, chúng tôi có một danh sách kích thước N được gọi là loại bỏ, nơi chúng tôi có thể loại bỏ 1 phiên bản của phần tử thứ i cho các lần xóa giá [i]. Vì vậy, chúng tôi phải tìm ra chi phí tối thiểu để mua chính xác một trong mọi phần tử từ 0 đến N-1, hoặc kết quả là -1 nếu điều này không thể thực hiện được.

 Vì vậy, nếu đầu vào giống như các bộ =[[0, 4, 4], [0, 5, 12], [2, 6, 9], [4, 8, 10]] 

Removal =[2, 5, 4, 6, 8], thì kết quả đầu ra sẽ là 4.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • N:=kích thước của lần xóa

  • graph:=một ma trận mới cho kích thước (N + 1) x (N + 1)

  • cho mỗi s, e, w trong bộ, làm

    • thêm [e + 1, w] vào biểu đồ [s]

  • đối với mỗi mục i, r trong chỉ mục i và mục r trong mục xóa, hãy thực hiện

    • thêm [i, r] vào biểu đồ [i + 1]

  • pq:=a new heap

  • dist:=một bản đồ mới

  • dist [0]:=0

  • trong khi pq không trống, thực hiện

    • d, e:=loại bỏ mục nhỏ nhất khỏi heap pq

    • nếu dist [e]

      • tiếp tục lần lặp tiếp theo

    • nếu e giống N thì

      • trở lại d

    • đối với mỗi nei, w trong biểu đồ [e], thực hiện

      • d2:=d + w

      • nếu d2

        • dist [nei]:=d2

        • thêm [d2, nei] vào pq

  • trả về -1

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

 nhập bộ sưu tập heapqfrom nhập mặc định lớp Giải pháp:def giải (tự, bộ, loại bỏ):N =len (loại bỏ) đồ thị =[[] cho _ trong phạm vi (N + 1)] cho s, e, w trong bộ:graph [s] .append ([e + 1, w]) for i, r in enumerate (Removal):graph [i + 1] .append ([i, r]) pq =[[0, 0]] dist =defaultdict (lambda:float ("inf")) dist [0] =0 while pq:d, e =heapq.heappop (pq) if dist [e]  

Đầu vào

 [[0, 4, 4], [0, 5, 12], [2, 6, 9], [4, 8, 10]], [2, 5, 4, 6, 8]  

Đầu ra

 4