ধরুন আমাদের একটি সংখ্যা n আছে। আমাদের প্রথম n ফিবোনাচি পদের যোগফল খুঁজে বের করতে হবে (n পদ পর্যন্ত ফিবোনাচ্চি)। যদি উত্তরটি খুব বড় হয় তাহলে ফলাফল মডিউল 10^8 + 7 ফেরত দিন।
সুতরাং, যদি ইনপুটটি n =8 এর মত হয়, তাহলে আউটপুট হবে 33 কারণ প্রথম কয়েকটি ফিবোনাচি পদ হল 0 + 1 + 1 +2 + 3 + 5 + 8 + 13 =33
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- m :=10^8+7
- মেমো :=একটি নতুন মানচিত্র
- একটি ফাংশন সংজ্ঞায়িত করুন solve()। এটি n, m লাগবে
- যদি n মেমোতে থাকে, তাহলে
- রিটার্ন মেমো[n]
- মেমো[n] :=n যখন n <2 অন্যথায় (solve(n-1, m) +solve(n-2, m)) mod m
- রিটার্ন মেমো[n]
- প্রধান পদ্ধতি থেকে মেমো মানের তালিকা পান এবং তাদের যোগফল নিন।
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
m = 10**8+7 memo = {} def solve(n, m): if n in memo: return memo[n] memo[n] = n if n < 2 else (solve(n-1, m)+solve(n-2, m)) % m return memo[n] n = 8 solve(n, m) print(sum(list(memo.values())[:n]))
ইনপুট
8
আউটপুট
33