ধরুন আমাদের কাছে সংখ্যা নামক সংখ্যার একটি তালিকা আছে যা কালানুক্রমিক ক্রমে একটি কোম্পানির স্টক মূল্যকে প্রতিনিধিত্ব করছে এবং আমাদের কাছে আরও একটি মান k আছে, তাহলে k ক্রয়-বিক্রয় থেকে আমরা সর্বাধিক লাভ করতে পারি তা আমাদের খুঁজে বের করতে হবে (আমাদের অবশ্যই কিনতে হবে বিক্রি করার আগে, এবং কেনার আগে বিক্রি করুন।
সুতরাং, ইনপুট যদি দামের মত হয় =[7, 3, 5, 2, 3] k =2, তাহলে আউটপুট হবে 3, যেমন আমরা 3 এ কিনতে পারি, তারপরে 5 এ বিক্রি করতে পারি, আবার 2 এ কিনুন এবং বিক্রি করতে পারি। 3 এ।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন dp() সংজ্ঞায়িত করুন। এটি i, k, কেনা লাগবে
- যদি i দামের আকারের সমান হয় বা k 0 এর সমান হয়, তাহলে
- রিটার্ন 0
- যদি কেনা সত্য হয়, তাহলে
- সর্বোচ্চ (dp(i+1, k-1, False) + মূল্য[i]) এবং dp(i+1, k, কেনা)
- অন্যথায়,
- সর্বোচ্চ (dp(i+1, k, True) - দাম[i]) এবং dp(i + 1, k, কেনা)
- মূল পদ্ধতি থেকে dp(0, k, False) কল করুন এবং ফলাফল ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
শ্রেণির সমাধান:def solve(self, prices, k):def dp(i, k, bought):if i ==len(prices) অথবা k ==0:রিটার্ন 0 যদি কেনা হয়:রিটার্ন max(dp( i + 1, k - 1, False) + মূল্য[i], dp(i + 1, k, কেনা)) অন্য:রিটার্ন সর্বোচ্চ(dp(i + 1, k, True) - দাম[i], dp( i + 1, k, কেনা)) রিটার্ন dp(0, k, False)ob =Solution()prices =[7, 3, 5, 2, 3]k =2print(ob.solve(prices, k))প্রে>ইনপুট
[7, 3, 5, 2, 3], 2আউটপুট
3