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