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

Chương trình tìm giá tối đa mà chúng tôi có thể nhận được bằng cách đựng các vật phẩm vào túi bằng Python

Giả sử chúng ta có hai danh sách các số. Một được gọi là trọng số và một được gọi là giá trị. Chúng có cùng độ dài, Chúng tôi cũng có hai giá trị được gọi là công suất và số lượng. Ở đây trọng số [i] và giá trị [i] đại diện cho trọng lượng và giá trị của mục thứ i. Chúng tôi có thể chứa nhiều nhất trọng lượng sức chứa và nhiều nhất là đếm tổng số các mục và chúng tôi chỉ có thể lấy một bản sao của mỗi mục, vì vậy chúng tôi phải tìm lượng giá trị tối đa mà chúng tôi có thể nhận được.

Vì vậy, nếu đầu vào giống như weights =[2, 2, 4, 6] giá trị =[15, 15, 20, 35] dung lượng =8 count =3, thì đầu ra sẽ là 50, vì chúng ta có thể chọn 3 mục đầu tiên , vì tổng trọng lượng là 8.

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

  • items:=danh sách các cặp bằng cách lấy trọng lượng và giá trị

  • Định nghĩa một hàm dp (). Điều này sẽ mất i, cp, ct

  • nếu tôi giống với kích thước của các mục hoặc ct bằng 0, thì

    • trả về 0,0

  • (w, v):=items [i]

  • ans:=dp (i + 1, cp, ct)

  • nếu cp> =w, thì

    • ans:=tối đa ans, dp (i + 1, cp - w, ct - 1) + v

  • trả lại ans

  • Từ phương thức chính trả về dp (0, dung lượng, số lượng)

Ví dụ

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

class Solution:
   def solve(self, weights, values, capacity, count):
      items = list(zip(weights, values))
      def dp(i, cp, ct):
         if i == len(items) or ct == 0:
            return 0.0
         w, v = items[i]
         ans = dp(i + 1, cp, ct)
         if cp >= w:
            ans = max(ans, dp(i + 1, cp - w, ct - 1) + v)
         return ans
      return int(dp(0, capacity, count))
ob = Solution()
weights = [2, 2, 4, 6]
values = [15, 15, 20, 35]
capacity = 8
count = 3
print(ob.solve(weights, values, capacity, count))

Đầu vào

[2, 2, 4, 6], [15, 15, 20, 35], 8, 3

Đầu ra

50