কম্পিউটার টিউটোরিয়াল

পাইথনে k বায়-সেল করে সর্বোচ্চ প্রফিট বের করার প্রোগ্রাম


ধরি আমাদের একটি নাম্বার লিস্ট nums আছে যা একটি কোম্পানির স্টক প্রাইস ক্রোনোলজিকাল অর্ডারে রিপ্রেজেন্ট করে এবং আরেকটি মান k আছে। আমাদের সর্বোচ্চ k বার বায় এবং সেল করে সর্বোচ্চ প্রফিট বের করতে হবে (পहले বায় করতে হবে, তারপর সেল, আবার বায় করার আগে সেল করতে হবে)।

তাই, ইনপুট যদি prices = [7, 3, 5, 2, 3], k = 2 হয়, তবে আউটপুট হবে ৩, কারণ ৩-এ বায় করে ৫-এ সেল, আবার ২-এ বায় করে ৩-এ সেল করলে প্রফিট ৩ হয়।

সমাধানের ধাপগুলো:

  • dp() ফাংশন ডিফাইন করুন। এটি i, k, bought নিবে
  • যদি i == len(prices) বা k == 0, তবে
    • ০ রিটার্ন করুন
  • যদি bought ট্রু হয়, তবে
    • max(dp(i+1, k-1, False) + prices[i], dp(i+1, k, bought)) রিটার্ন করুন
  • অন্যথায়,
    • max(dp(i+1, k, True) - prices[i], dp(i+1, k, bought)) রিটার্ন করুন
  • মেইন মেথড থেকে dp(0, k, False) কল করে রেজাল্ট রিটার্ন করুন

বেশি বুঝতে নিচের বাস্তবায়নটি দেখুন:

উদাহরণ

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))

ইনপুট

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

আউটপুট

3
  1. পাইথনে স্টক মার্কেটে একাধিকবার কেনা-বেচা করে সর্বাধিক লাভ বের করার প্রোগ্রাম

  2. পাইথনে স্টক মার্কেটে একবার কেনা-বেচা করে সর্বাধিক লাভ বের করার প্রোগ্রাম

  3. পাইথনে 'a' কে 'a' বা 'b' এবং 'b' কে 'b' রেখে বানানো সম্ভাব্য স্ট্রিং সংখ্যা বের করার প্রোগ্রাম

  4. পাইথনে লিস্টে সর্বোচ্চ ও ন্যূনতম উপাদানের পজিশন বের করার প্রোগ্রাম