ধরুন আমাদের কাছে সীমিত মূল্যের মুদ্রা রয়েছে (₹1, ₹2, ₹5 এবং ₹10)। আমাদের খুঁজে বের করতে হবে কত উপায়ে আপনি তাদের মোট ₹n পর্যন্ত যোগ করতে পারেন? আমাদের কাছে আকার 4 এর একটি অ্যারে গণনা রয়েছে, যেখানে গণনা[0] ₹1 এর কয়েন নির্দেশ করে, গণনা[1] ₹2 এর কয়েন নির্দেশ করে।
সুতরাং, যদি ইনপুট n =25 কাউন্ট =[7,3,2,2] এর মত হয়, তাহলে আউটপুট হবে 9।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ডিনম :=[1,2,5,10]
- A :=আকারের একটি অ্যারে (n + 1) এবং 0 দিয়ে পূরণ করুন
- B :=A থেকে একটি নতুন তালিকা
- 0 থেকে (সর্বনিম্ন গণনা [0] এবং n) রেঞ্জের জন্য, কর
- A[i] :=1
- আমি 1 থেকে 3 রেঞ্জের জন্য, কর
- গণনা করার জন্য 0 রেঞ্জের j-এর জন্য [i], করুন
- 0 থেকে n + 1 - j *ডেনম[i] রেঞ্জের k-এর জন্য, করুন
- B[k + j * denom[i]] :=B[k + j * denom[i]] + A[k]
0 থেকে n রেঞ্জে j-এর জন্য - 0 থেকে n + 1 - j *ডেনম[i] রেঞ্জের k-এর জন্য, করুন
- করুন
- A[j] :=B[j]
- B[j] :=0
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
denom = [1,2,5,10]
def solve(n, count):
A = [0] * (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 = 25
count = [7,3,2,2]
print(solve(n, count)) ইনপুট
25, [7,3,2,2]
আউটপুট
9