علی برای بهبود کار شرکت میخواهد چند نفر از اعضای شرکت که میتوانند سوال زیر را حل کنند انتخاب کند و آنها را برای آموزش پیشرفته آماده کند... تربچه که خیلی دوست دارد آموزشهای پیشرفته را ببیند میخواهد این سوال را حل کند... به او کمک کنید تا این کار را انجام دهد...
برای هر عدد طبیعی فرض کنید مجموعه همه دنبالههایی از اعداد طبیعی باشد که جمع اعضای این دنباله برابر است. به عبارت دیگر: اکنون ترب میخواهد عبارت زیر را محاسبه کند. به ترب کمک کنید تا این عبارت را محاسبه کند چون ممکن است پاسخ شما بسیار عدد بزرگی باشد باقیمانده آن را به پیمانه حساب کنید.
ورودی تنها شامل یک خط است که در آن دو عدد طبیعی و با فاصله از هم آمده است.
در تنها سطر خروجی پاسخ مسئله را به پیمانه چاپ کنید.
تمام اعضای مجموعه عبارت است از: بنابراین حاصل مجموع فوق برابر است با:
در این قسمت راهنماییهای سوال، به مرور اضافه میشود. مشکلاتتان در راستای حل سوال را میتوانید از بخش "سوال بپرسید" مطرح کنید.
اولین نکتهای که توجه به آن برای حل مسئله ضروری میباشد، این است که افرازهایمان ترتیب دارند و برای مثال افراز 1 2
با افراز 2 1
فرق دارد. حال بر اساس این نکته میتوان دریافت که تعداد افرازهای ترتیبدار عدد برابر میباشد چرا که میتوانیم توپ در یک ردیف در نظر بگیریم و هر افراز را با یک حالت دیوار گذاشتن در جایگاه خالی بین توپها متناظر کنیم.
حال برای عبارت جواب، مسئلهای ترکیبیاتی تعریف میکنیم و تلاش میکنیم تا با شمارش مضاعف، آن را به روش دیگری محاسبه کنیم:
در یک ردیف، جعبه متوالی با شماره ۱ تا داریم. میخواهیم آنها را بلوکبندی کنیم و در هر بلوک، به ازای همه رنگهای ۱ تا ، دقیقا یک توپ با آن رنگ را در یکی از جعبههای این بلوک قرار دهیم. اگر ترتیب قرار دادن توپها در جعبهها اهمیتی نداشته باشد، به چند طریق این کار ممکن است؟
برای حل مسئله مطرح شده در انتهای راهنمایی قبل، از برنامهنویسی پویا استفاده میکنیم یا به عبارت دیگر میزنیم :) ابتدا به تعریف میپردازیم. یعنی تعداد روشهای چیدن توپها در جعبه اول به گونهای که بلوک آخرمان برای تکمیل شدن، به توپ رنگی دیگر نیاز داشته باشد. دقت کنید که تعداد بلوکها برایمان اهمیتی ندارد و نه در مولفه و نه در پاسخ هر خانه آرایه، به آن اشارهای نمیکنیم.
حالت پایه که تقریبا واضح است، .
برای اپدیت کردن یک استیت، بر روی تعداد توپهای رنگی خانه ام حالت میبندیم. به ازای همه هایی که ، از اپیدت میشوم و ضریب این اپدیت هم برابر حاصل انتخاب از میباشد چرا که قرار است از توپ رنگی باقیمانده در مرحله قبل، تا را برای ادامه بلوک انتخاب کنیم و بقیه را در جعبه ام قرار دهیم.
همچنین یک حالت دیگر هم وجود دارد و آن هم اینکه خانه ام اولین خانه بلوک جدید باشد که در این حالت باید از با ضریب از اپدیت شود.
با توجه به راهحل تعداد خانههای آرایه که باید پر شوند، میباشد و برای اپدیت کردن هر خانه هم عملیات انجام میدهیم. بنابراین پیچیدگی زمانی راهحل فعلی از میباشد.
حال که بلدیم برای مسئله دو بعدی مناسبی تعریف کنیم که هر سطر آن، فقط از سطر قبلی و به صورت خطی با ضرایب آپدیت میشود، میتوانیم از ماتریس برای حل مسئله استفاده کنیم.
به این صورت که یک ماتریس یک بعدی به طول را به عنوان پایه در نظر میگیریم و از یک ماتریس دو بعدی برای اپدیت کردن آن استفاده میکنیم، به این صورت که اگر ماتریس دو بعدی ما در ماتریس یک بعدی ما که نشاندهنده مقادیر خانههای سطر ام است ضرب شود، حاصل ماتریس یک بعدی خواهد شد که مقادیر سطر را داراست. ساختن این ماتریس نیز بر اساس ضرایب اپدیت است و تعدادی انتخاب و به علاوه یک خواهد بود.
حال میدانیم که مقادیر سطر صفر را در ماتریس پایه بریزیم، برای داشتن سطر پایانی باید بار در ماتریس اپدیت ضرب شویم و از آنجایی که ضرب ماتریس به صورت بالا خاصیت شرکتپذیری دارد، ابتدا ماتریس اپدیت را در به توان میرسانیم و سپس حاصل را در ماتریس پایه ضرب میکنیم تا سطر ام به دست آید و خانه اول آن یعنی پاسخ مسئله ما خواهد بود.