मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है जो कालानुक्रमिक क्रम में एक कंपनी के शेयर की कीमतों का प्रतिनिधित्व कर रहा है और हमारे पास एक और मूल्य भी है, हमें अधिकतम लाभ का पता लगाना है जो हम k खरीद और बिक्री से कर सकते हैं (हमें खरीदना चाहिए बेचने से पहले, और खरीदने से पहले बेचें)।
इसलिए, यदि इनपुट कीमतों की तरह है =[7, 3, 5, 2, 3] k =2, तो आउटपुट 3 होगा, जैसा कि हम 3 पर खरीद सकते हैं, फिर 5 पर बेच सकते हैं, फिर से 2 पर खरीद सकते हैं और बेच सकते हैं। 3.
. परइसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन को परिभाषित करें dp() । इसमें i, k, ख़रीदा गया . लगेगा
- यदि मैं कीमतों के आकार के समान हूं या 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) पर कॉल करें और परिणाम लौटाएं
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
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