मान लीजिए कि हमारे पास एक सरणी संख्या है, अधिकतम 50 अद्वितीय मान हैं। हमारे पास मात्रा नामक एक और सरणी भी है, जहां मात्रा [i] ग्राहक द्वारा ऑर्डर किए गए मूल्यों की मात्रा को दर्शाता है। हमें यह जांचना होगा कि अंकों को वितरित करना संभव है या नहीं
-
ith ग्राहक को ठीक मात्रा [i] आइटम,
. मिलता है -
ith ग्राहक को जो मूल्य मिलता है, वह सभी बराबर होता है, और
-
सभी ग्राहक संतुष्ट हैं।
इसलिए, यदि इनपुट अंकों की तरह है =[5,1,2,2,3,4,3,3] मात्रा =[2,2,3], तो आउटपुट सही होगा क्योंकि दो ग्राहक दो तत्व चाहते हैं प्रत्येक, इसलिए वे [2,2] और [4,4] प्राप्त कर सकते हैं, और तीसरा तीन आइटम चाहता है, वे [3,3,3] प्राप्त कर सकते हैं, इसलिए सभी संतुष्ट हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
उपयोग() फ़ंक्शन को परिभाषित करें। इसमें मुझे, cntr लगेगा
-
अगर मैं मात्रा के आकार के समान हूं, तो
-
सही लौटें
-
-
temp_counter :=cntr की कॉपी बनाएं
-
cntr में प्रत्येक cnt के लिए, करें
-
अगर cnt>=मात्रा[i], तो
-
temp_counter[cnt] :=temp_counter[cnt] - 1
-
अगर temp_counter[cnt] 0 के समान है, तो
-
cnt-वें तत्व को temp_counter से हटाएं
-
-
रेम:=सीएनटी - मात्रा [i]
-
temp_counter[rem] :=temp_counter[rem] + 1
-
यदि उपयोग (i+1, temp_counter) सत्य है, तो
-
सही लौटें
-
-
temp_counter[rem] :=temp_counter[rem] - 1
-
अगर temp_counter[rem] 0 के समान है, तो
-
अस्थायी_काउंटर से रेम-वें तत्व हटाएं
-
-
-
temp_counter[cnt] :=temp_counter[cnt] + 1
-
-
झूठी वापसी
-
मुख्य विधि से, निम्न कार्य करें
-
cnt :=अंकों में मौजूद संख्याओं की सभी आवृत्तियों की आवृत्ति को धारण करने वाला मानचित्र
-
मात्रा को उल्टे क्रम में क्रमबद्ध करें
-
वापसी का उपयोग (0, सीएनटी)
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
from collections import Counter def solve(nums, quantity): def util(i, cntr): if i == len(quantity): return True temp_counter = cntr.copy() for cnt in cntr: if cnt >= quantity[i]: temp_counter[cnt] -= 1 if temp_counter[cnt] == 0: temp_counter.pop(cnt) rem = cnt - quantity[i] temp_counter[rem] += 1 if util(i+1, temp_counter): return True temp_counter[rem] -= 1 if temp_counter[rem] == 0: temp_counter.pop(rem) temp_counter[cnt] += 1 return False cnt = Counter(Counter(nums).values()) quantity.sort(reverse=True) return util(0, cnt) nums = [5,1,2,2,3,4,4,3,3] quantity = [2,2,3] print(solve(nums, quantity))
इनपुट
[0,1,2,3,4], [[3,1],[1,3],[5,6]]
आउटपुट
True