মনে করুন, n সংখ্যক ক্যান্ডি এবং k ব্যাগ আছে যাতে ক্যান্ডিগুলো রাখতে হবে। আমাদের বের করতে হবে কতগুলো সম্ভাব্য পদ্ধতিতে ক্যান্ডিগুলো বিতরণ করা যায় যাতে প্রতিটি ব্যাগে কমপক্ষে একটি ক্যান্ডি থাকে। এই সিনেরিওতে প্রতিটি ক্যান্ডি уникаল, তাই ক্যান্ডিগুলো ব্যাগে বিতরণের সব সম্ভাব্য পদ্ধতি গণনা করতে হবে।
সুতরাং, যদি ইনপুট হয় n = 3, k = 2, তবে আউটপুট হবে 3।
ক্যান্ডিগুলো নিচেরভাবে রাখা যায় −
(1, 2), (3) (1), (2, 3) (2), (1, 3)
এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব −
dp := 1 দিয়ে ইনিশিয়ালাইজ করা n x n আকারের একটি ম্যাট্রিক্স
c = 2 থেকে n পর্যন্ত জন্য, করুন
b = 1 থেকে min(c, k) পর্যন্ত জন্য, করুন
dp[c, b] := dp[c-1, b-1] + dp[c-1, b] * (b+1)
dp[n-1, k-1] রিটার্ন করুন
উদাহরণ
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশন দেখুন −
def solve(n, k):
dp = [[1] * n for _ in range(n)]
for c in range(2, n):
for b in range(1, min(c, k)):
dp[c][b] = dp[c-1][b-1] + dp[c-1][b] * (b+1)
return dp[n-1][k-1]
print(solve(3, 2))
ইনপুট
3, 2
আউটপুট
3