Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

จะใช้ปัญหาการเปลี่ยนเหรียญโดยใช้วิธีการจากบนลงล่างโดยใช้ C # ได้อย่างไร


CoinChangeTopDownApproach ใช้พารามิเตอร์ 4 ตัว n คือจำนวนเงิน อาร์เรย์เหรียญประกอบด้วยเหรียญที่ต้องการคำนวณ t คือจำนวนเหรียญทั้งหมด dp array จะเก็บค่าล่วงหน้าทั้งหมด ค่าที่คำนวณได้ หากจำนวนเงินเป็น 0 ให้คืนค่า 0 หากคำนวณค่าไว้แล้วให้คืนค่าจากอาร์เรย์ dp หากไม่คำนวณค่า ให้เรียก CoinChangeTopDownApproach ซ้ำๆ

ความซับซ้อนของเวลา − O(N)

ความซับซ้อนของอวกาศ − O(N)

ตัวอย่าง

public class DynamicProgramming{
   public int CoinChangeTopDownApproach(int n,int[] coins,int t,int[] dp){
      if (n == 0){
         return 0;
      }
      if (dp[n] != 0){
         return dp[n];
      }
      int ans = int.MaxValue;
      for (int i = 0; i < t; i++){
         if (n - coins[i] >= 0){
            int subprob = CoinChangeTopDownApproach(n - coins[i], coins, t, dp);
            ans = Math.Min(ans, subprob + 1);
      }
   }
   dp[n] = ans;
   return dp[n];
   }
}

static void Main(string[] args){
   DynamicProgramming dp = new DynamicProgramming();
   int N = 15;
   int[] coins = { 1, 7, 10 };
   int[] dp1 = new int[100];
   int t = coins.Count();
   int res = dp.CoinChangeTopDownApproach(15, coins, t, dp1);
   Console.WriteLine(res);
}

ผลลัพธ์

3