MinimumStepstoOneTopdownApproach ইনপুট হিসাবে পূর্ণসংখ্যা n এবং একটি পূর্ণসংখ্যা অ্যারে নেয়। প্যারামিটার n এ উপাদানের মোট সংখ্যা রয়েছে। প্রাথমিক অবস্থা n 1 এর সমান কিনা তা পরীক্ষা করে। যদি n 1 এর সমান হয় তবে 0 ফেরত দিন। op1,op2 এবং op3-কে সর্বোচ্চ মান শুরু করুন। যদি n mod 3 0 এর সমান হয় তবে MinimumStepstoOneTopdownApproach কে বারবার কল করুন এবং op1-এ বরাদ্দ করুন, যদি n mod 3 0 এর সমান হয় তবে মিনিমমস্টেপস্টোঅন টপডাউন অ্যাপপ্রোচকে রিকার্সিভভাবে কল করুন এবং op2-এ বরাদ্দ করুন অন্যথায় 1 দ্বারা n বিয়োগ করুন এবং মিনিমামস্টপস্টপডাউন এ কল করুন। ন্যূনতম তিনটি উপাদান গণনা করতে এবং dp অ্যারে থেকে মান ফেরত দিতে অবশেষে Math.Min-এ কল করুন
সময় জটিলতা − O(N)
মহাকাশ জটিলতা − O(N)
উদাহরণ
public class DynamicProgramming{ public int MinimumStepstoOneTopdownApproach(int n, int[] dp){ if (n == 1){ return 0; } int op1, op2, op3; op1 = int.MaxValue; op2 = int.MaxValue; op3 = int.MaxValue; if (n % 3 == 0){ op1 = MinimumStepstoOneTopdownApproach(n / 3, dp); } if (n % 2 == 0){ op2 = MinimumStepstoOneTopdownApproach(n / 2, dp); } op3 = MinimumStepstoOneTopdownApproach(n -1, dp); int ans = Math.Min(Math.Min(op1, op2), op3)+1; return dp[n] = ans; } } static void Main(string[] args){ DynamicProgramming dp = new DynamicProgramming(); int[] dpArr = new int[150]; Console.WriteLine(dp.MinimumStepstoOneTopdownApproach(10, dpArr)); }
আউটপুট
3