मान लीजिए हमने मूल्यवर्ग (1, 2, 5 और 10) के सिक्के दिए हैं। हमें यह पता लगाना है कि इन प्रभुत्वों का उपयोग करके हम कितने तरीकों से n को व्यवस्थित कर सकते हैं। हमारे पास 4 तत्वों के साथ गिनती नामक एक सरणी है, जहां गिनती [0] 1 के सिक्कों की संख्या इंगित करती है, गिनती [1] 2 के लिए सिक्कों की संख्या इंगित करती है और इसी तरह।
इसलिए, यदि इनपुट n =27 काउंट =[8,4,3,2] जैसा है, तो आउटपुट 18 होगा, इसलिए 18 संभावित संयोजन हैं उनमें से कुछ हैं
-
10*2 + 5*1 + 2*1 =27
-
10*2 + 2*3 + 1*1 =27
-
10*1 + 5*3 + 2*1 =27
-
10*1 + 5*1 + 4*2 + 4*1 =27
और इसी तरह...
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- संप्रदाय :=[1,2,5,10]
- A :=आकार की एक सरणी (n + 1) और 0 से भरें
- B :=A से एक नई सूची
- मैं के लिए 0 से (न्यूनतम गिनती [0] और n) की सीमा में, करते हैं
- ए[i] :=1
- 1 से 3 के बीच के लिए, करें
- जे के लिए रेंज 0 से गिनने के लिए[i], करें
- के लिए 0 से n + 1 - j *denom[i] की श्रेणी में, do
- B[k + j * denom[i]] :=B[k + j * denom[i]] + A[k]
- के लिए 0 से n + 1 - j *denom[i] की श्रेणी में, do
- जे के लिए 0 से n की सीमा में, करें
- ए[जे]:=बी[जे]
- बी[जे] :=0
- जे के लिए रेंज 0 से गिनने के लिए[i], करें
- वापसी A[n]
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
denom = [1,2,5,10] def solve(n, count): A = [0 for _ in range(n+1)] B = list(A) for i in range(min(count[0], n) + 1): A[i] = 1 for i in range(1, 4): for j in range(0, count[i] + 1): for k in range(n + 1 - j *denom[i]): B[k + j * denom[i]] += A[k] for j in range(0, n + 1): A[j] = B[j] B[j] = 0 return A[n] n = 27 count = [8,4,3,2] print(solve(n, count))
इनपुट
27, [8,4,3,2]
आउटपुट
18