CoinChangeBottomUpApproach ใช้ 3 พารามิเตอร์เนื่องจากอินพุต n คือจำนวนเงิน อาร์เรย์เหรียญประกอบด้วยจำนวนเหรียญทั้งหมด t มีจำนวนเหรียญทั้งหมด ประกาศอาร์เรย์แบบไดนามิกที่เก็บค่าที่คำนวณไว้ก่อนหน้านี้ วนซ้ำผ่านอาร์เรย์และคำนวณเหรียญขั้นต่ำที่จำเป็นในการคำนวณจำนวน หากคำนวณเสร็จแล้ว ให้นำค่าจากไดนามิกอาร์เรย์
ความซับซ้อนของเวลา - โอ(N)
ความซับซ้อนของอวกาศ - โอ(N)
ตัวอย่าง
public class DynamicProgramming{
public int CoinChangeBottomUpApproach(int n,int[] coins,int t){
int[] dp = new int[100];
for (int i = 1; i < n; i++){
dp[i] = int.MaxValue;
for (int j = 0; j < t; j++){
if (i - coins[j] >= 0){
int subProb = dp[i - coins[j]];
dp[i] = Math.Min(dp[i], subProb + 1);
}
}
}
return dp[n]+1;
}
}
static void Main(string[] args){
DynamicProgramming dp = new DynamicProgramming();
int[] coins = { 1, 7, 10 };
int ss = dp.CoinChangeBottomUpApproach(15, coins, coins.Count());
Console.WriteLine(ss);
} ผลลัพธ์
3