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

Chương trình tìm kiếm lợi nhuận tối đa mà chúng tôi có thể kiếm được sau khi k Mua và Bán trong python

Giả sử chúng ta có một danh sách các số được gọi là nums đại diện cho giá cổ phiếu của một công ty theo thứ tự thời gian và chúng ta cũng có một giá trị khác k, chúng ta phải tìm lợi nhuận tối đa mà chúng ta có thể tạo ra từ tối đa k mua và bán (Chúng ta phải mua trước khi bán và bán trước khi mua).

Vì vậy, nếu đầu vào là giá =[7, 3, 5, 2, 3] k =2, thì đầu ra sẽ là 3, vì chúng ta có thể mua ở mức 3, sau đó bán ở mức 5, lại mua ở mức 2 và bán tại 3.

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

  • Định nghĩa một hàm dp (). Điều này sẽ mất tôi, k, đã mua
  • nếu tôi giống với kích thước của giá hoặc k giống với 0, thì
    • trả về 0
  • nếu mua là true, thì
    • trả lại tối đa (dp (i + 1, k-1, False) + giá [i]) và dp (i + 1, k, đã mua)
  • nếu không,
    • trả lại tối đa là (dp (i + 1, k, True) - giá [i]) và dp (i + 1, k, đã mua)
  • Từ phương thức chính gọi dp (0, k, False) và trả về kết quả

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

Ví dụ

class Solution:
   def solve(self, prices, k):
      def dp(i, k, bought):
         if i == len(prices) or k == 0:
            return 0
         if bought:
            return max(dp(i + 1, k - 1, False) + prices[i], dp(i + 1, k, bought))
         else:
            return max(dp(i + 1, k, True) - prices[i], dp(i + 1, k, bought))

      return dp(0, k, False)

ob = Solution()
prices = [7, 3, 5, 2, 3]
k = 2
print(ob.solve(prices, k))

Đầu vào

[7, 3, 5, 2, 3], 2

Đầu ra

3