मान लीजिए कोई कैंडी स्टोर है जहां N विभिन्न प्रकार की कैंडी उपलब्ध हैं और सभी N विभिन्न प्रकार की कैंडी की कीमतें दी गई हैं। स्टोर एक आकर्षक ऑफर भी प्रदान करता है। इस ऑफर के अनुसार, हम स्टोर से एक कैंडी खरीद सकते हैं और अधिकतम K विभिन्न प्रकार की अन्य कैंडी मुफ्त में प्राप्त कर सकते हैं। हमें सभी एन विभिन्न प्रकार की कैंडी खरीदने के लिए न्यूनतम राशि का पता लगाना होगा। हमें सभी एन विभिन्न प्रकार की कैंडी खरीदने के लिए अधिकतम राशि भी ढूंढनी होगी। दोनों ही मामलों में हमें प्रस्ताव का उपयोग करना चाहिए और अधिकतम संभव कैंडी वापस प्राप्त करनी चाहिए। यदि k या अधिक कैंडी उपलब्ध हैं, तो हमें प्रत्येक कैंडी खरीद के लिए k कैंडीज का चयन करना होगा। लेकिन, अगर k से कम कैंडी उपलब्ध हैं, तो हमें कैंडी खरीदने के लिए सभी कैंडी का चयन करना होगा।
इसलिए, यदि इनपुट मूल्य =[4, 3, 2, 5] और k =2 के समान है, तो आउटपुट न्यूनतम =5 और अधिकतम =9 होगा। ऐसा इसलिए है क्योंकि जब k 2 होता है, यदि हम एक कैंडी खरीदते हैं और हम अधिकतम दो और मुफ्त में ले सकते हैं। पहले मामले में हम 2 की कीमत वाली कैंडी खरीद सकते हैं और 4 और 5 की कीमत की कैंडी मुफ्त में ले सकते हैं, साथ ही हम 3 की कैंडी भी खरीद सकते हैं, इसलिए न्यूनतम लागत =2 + 3 =5. दूसरी ओर, दूसरे में यदि हम 5 की कीमत वाली कैंडी खरीदते हैं और 2 और 3 की कीमत की कैंडी मुफ्त में लेते हैं, या हम 4 की कैंडी भी खरीद सकते हैं। तो, अधिकतम लागत =4 + 5 =9.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक फ़ंक्शन को परिभाषित करें get_min() । इसमें A,k
. लगेगा -
n :=A का आकार
-
सूची ए को क्रमबद्ध करें
-
रेस :=0, i:=0
-
जबकि n शून्य नहीं है, करें
-
रेस :=रेस + ए[i]
-
एन:=एन-के
-
मैं :=मैं + 1
-
-
रिटर्न रेस
-
एक फ़ंक्शन को परिभाषित करें get_max() । इसमें A, k
. लगेगा -
n :=A का आकार
-
सूची ए को क्रमबद्ध करें
-
रेस:=0, आईडीएक्स:=0
-
मैं:=n-1
-
जबकि i>=idx, करते हैं
-
रेस :=रेस + ए[i]
-
आईडीएक्स:=आईडीएक्स + के
-
मैं :=मैं - 1
-
-
रिटर्न रेस
-
मुख्य विधि से परिणाम प्राप्त करने के लिए इन दो कार्यों को कॉल करें
-
get_min(ए, के)
-
get_max(ए, के)
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def get_min(A,k): n = len(A) A.sort() res = 0 i=0 while(n): res += A[i] n = n-k i += 1 return res def get_max(A, k): n = len(A) A.sort() res = 0 idx = 0 i=n-1 while(i>=idx): res += A[i] idx += k i -= 1 return res A = [4, 3, 2, 5] k = 2 print(get_min(A, k),get_max(A, k))
इनपुट
[4, 3, 2, 5], 2
आउटपुट
5 9