ধরুন আমাদের কাছে কালানুক্রমিক ক্রমানুসারে একটি কোম্পানির স্টক মূল্যের একটি তালিকা রয়েছে এবং একটি বিক্রয় লেনদেনের জন্য লেনদেন ফিও রয়েছে। যে কোন সংখ্যক বার সেই স্টক ক্রয় এবং বিক্রয় থেকে আমরা সর্বাধিক লাভ করতে পারতাম তা খুঁজে বের করতে হবে। আমরা এটি বিক্রি করার আগে আমাদের কিনতে হবে।
সুতরাং, ইনপুট যদি দামের মত হয় =[2, 10, 4, 8] ফি =3, তাহলে আউটপুট হবে 6, যেহেতু আমরা 2-এ কিনতে পারি এবং 10-এ বিক্রি করতে পারি এবং 3 ফি দিতে পারি, তাই লাভ 5। তারপরে আমরা 4 এ কিনব এবং 8 এ বিক্রি করব এবং 3 টাকা ফি দিতে হবে, তাই লাভ 1, মোট লাভ 6।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব:
-
n :=দামের আকার
-
একটি ফাংশন recur() সংজ্ঞায়িত করুন। এটি i:=0 এবং পতাকা:=0
লাগবে -
যদি আমি n এর মত হয়, তাহলে
-
রিটার্ন 0
-
-
যদি পতাকা মিথ্যা হয়, তাহলে
-
রিকার সর্বোচ্চ রিটার্ন (i + 1, 1) - দাম[i] এবং recur(i + 1, 0)
-
-
রিকার (i + 1, 1) এবং recur (i + 1, 0) + মূল্য[i] - ফি
-
মূল পদ্ধতি থেকে recur()
কল করুন
আরও ভালভাবে বোঝার জন্য আসুন নিম্নলিখিত বাস্তবায়ন দেখি:
উদাহরণ
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))
ইনপুট
[2, 10, 4, 8], 3
আউটপুট
6