ধরা যাক একটি কোম্পানির স্টক প্রাইসের লিস্ট ক্রোনোলজিকল অর্ডারে দেওয়া আছে এবং একটি সেল ট্রানজ্যাকশনের জন্য ফি দেওয়া আছে। আমাদের সেই স্টক যেকোনো বার কেনা-বেচা করে সর্বাধিক লাভ বের করতে হবে। কেনার আগে অবশ্যই কেনা লাগবে।
উদাহরণ
ইনপুট: prices = [2, 10, 4, 8], fee = 3
আউটপুট: 6
ব্যাখ্যা: ২-এ কিনে ১০-এ বিক্রি করলে লাভ ৫ (ফি ৩ বাদে)। আবার ৪-এ কিনে ৮-এ বিক্রি করলে লাভ ১। মোট লাভ ৬।
সমাধানের ধাপসমূহ (রিকার্শন + মেমোইজেশন)
n := len(prices)recur(i=0, flag=0)ফাংশন সংজ্ঞায়িত করুন:- যদি
i == nহয়, তবে0ফেরত দিন - যদি
flag == False(স্টক কেনা বাকি), তবে:max(recur(i+1, 1) - prices[i], recur(i+1, 0))ফেরত দিন
- অন্যথায় (স্টক কেনা হয়েছে), তবে:
max(recur(i+1, 1), recur(i+1, 0) + prices[i] - fee)ফেরত দিন
- যদি
- মূল মেথড থেকে
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