Giả sử chúng ta có danh sách giá cổ phiếu của một công ty theo trình tự thời gian và cũng có phí giao dịch cho một giao dịch bán. Chúng tôi phải tìm lợi nhuận tối đa mà chúng tôi có thể kiếm được từ việc mua và bán cổ phiếu đó bất kỳ số lần nào. Chúng ta phải mua trước khi có thể bán nó.
Vì vậy, nếu đầu vào là giá =[2, 10, 4, 8] phí =3, thì đầu ra sẽ là 6, vì chúng ta có thể mua ở mức 2 và bán ở mức 10 và phải chịu phí là 3, do đó lợi nhuận là 5 . Sau đó, chúng tôi mua ở mức 4 và bán ở mức 8 và chịu phí là 3, do đó lợi nhuận 1, tổng lợi nhuận 6.
Để 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 giá
-
Định nghĩa một hàm recom (). Điều này sẽ lấy i:=0 và cờ:=0
-
nếu tôi giống n, thì
-
trả về 0
-
-
nếu cờ là sai, thì
-
trả lại tối đa định kỳ (i + 1, 1) - giá [i] và định kỳ (i + 1, 0)
-
-
trả lại tối đa định kỳ (i + 1, 1) và định kỳ (i + 1, 0) + giá [i] - phí
-
Từ phương thức chính, hãy gọi hàm rec ()
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, fee): n = len(prices) def recur(i=0, flag=0): if i == n: return 0 if not flag: return max(recur(i + 1, 1) - prices[i], recur(i + 1, 0)) return max(recur(i + 1, 1), recur(i + 1, 0) + prices[i] - fee) return recur() ob = Solution() prices = [2, 10, 4, 8] fee = 3 print(ob.solve(prices, fee))
Đầu vào
[2, 10, 4, 8], 3
Đầu ra
6