ابحث عن الحد الأدنى لتكلفة التعديل للمصفوفة

ابحث عن الحد الأدنى لتكلفة التعديل للمصفوفة
جربه على ممارسة GfG #practiceLinkDiv { العرض: لا شيء! مهم؛ }

نظرًا لمصفوفة من الأعداد الصحيحة الموجبة، استبدل كل عنصر في المصفوفة بحيث يكون الفرق بين العناصر المتجاورة في المصفوفة أقل من أو يساوي هدفًا محددًا. نحن بحاجة إلى تقليل تكلفة التعديل التي تمثل مجموع الاختلافات بين القيم الجديدة والقديمة. نحتاج بشكل أساسي إلى تقليل ?|A[i] - A جديد [i]| أين 0 ؟ أنا ؟ n-1 n هو حجم A[] وA جديد [] هي المصفوفة ذات الفرق المجاور أقل من الهدف أو يساويه. افترض أن جميع عناصر المصفوفة أقل من الثابت M = 100.

أمثلة:  

    Input:     arr = [1 3 0 3] target = 1   
Output: Minimum adjustment cost is 3
Explanation: One of the possible solutions
is [2 3 2 3]
Input: arr = [2 3 2 3] target = 1
Output: Minimum adjustment cost is 0
Explanation: All adjacent elements in the input
array are already less than equal to given target
Input: arr = [55 77 52 61 39 6
25 60 49 47] target = 10
Output: Minimum adjustment cost is 75
Explanation: One of the possible solutions is
[55 62 52 49 39 29 30 40 49 47]
Recommended Practice ابحث عن الحد الأدنى لتكلفة التعديل للمصفوفة جربه!

من أجل تقليل تكلفة التعديل ?|A[i] - A جديد [i]| لجميع الفهرس i في المصفوفة |A[i] - A جديد [i]| يجب أن تكون قريبة من الصفر قدر الإمكان. أيضًا |أ[i] - أ جديد [i+1] ]| ؟ هدف.
يمكن حل هذه المشكلة عن طريق البرمجة الديناميكية .

دع dp[i] [j] يحدد الحد الأدنى من تكلفة التعديل عند تغيير A[i] إلى j ثم يتم تحديد علاقة DP بواسطة - 

 dp[i][j] = min{dp[i - 1][k]} + |j - A[i]|   
for all k's such that |k - j| ? target

هنا 0 ؟ أنا ؟ ن و 0 ؟ ي ؟ M حيث n هو عدد العناصر في المصفوفة و M = 100. علينا أن نأخذ في الاعتبار كل k بحيث يكون max(j - target 0) ؟ ك ؟ دقيقة (م ي + الهدف)
أخيرًا، سيكون الحد الأدنى لتكلفة تعديل المصفوفة هو min{dp[n - 1][j]} لجميع 0 ? ي ؟ م.

الخوارزمية:

  • قم بإنشاء مصفوفة ثنائية الأبعاد باستخدام التهيئة dp[n][M+1] لتسجيل أقل تكلفة تعديل لتغيير A[i] إلى j حيث n هو طول المصفوفة وM هي القيمة القصوى لها.
  • احسب أصغر تكلفة تعديل لتغيير A[0] إلى j للعنصر الأول في المصفوفة dp[0][j] باستخدام الصيغة dp[0][j] = abs (j - A[0]).
  • استبدل A[i] بـ j في عناصر المصفوفة المتبقية dp[i][j] واستخدم الصيغة dp[i][j] = min(dp[i-1][k] + abs(A[i] - j)) حيث تأخذ k جميع القيم الممكنة بين max(j-target0) وmin(Mj+target) للحصول على الحد الأدنى من تكلفة التعديل.
  • نظرًا لأن الحد الأدنى لتكلفة التعديل يعطي أقل رقم من الصف الأخير من جدول dp. 

وفيما يلي تنفيذ الفكرة المذكورة أعلاه:

C++
   // C++ program to find minimum adjustment cost of an array   #include          using     namespace     std  ;   #define M 100   // Function to find minimum adjustment cost of an array   int     minAdjustmentCost  (  int     A  []     int     n       int     target  )   {      // dp[i][j] stores minimal adjustment cost on changing      // A[i] to j      int     dp  [  n  ][  M     +     1  ];      // handle first element of array separately      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      dp  [  0  ][  j  ]     =     abs  (  j     -     A  [  0  ]);      // do for rest elements of the array      for     (  int     i     =     1  ;     i      <     n  ;     i  ++  )      {      // replace A[i] to j and calculate minimal adjustment      // cost dp[i][j]      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      {      // initialize minimal adjustment cost to INT_MAX      dp  [  i  ][  j  ]     =     INT_MAX  ;      // consider all k such that k >= max(j - target 0) and      // k  <= min(M j + target) and take minimum      for     (  int     k     =     max  (  j  -  target    0  );     k      <=     min  (  M    j  +  target  );     k  ++  )      dp  [  i  ][  j  ]     =     min  (  dp  [  i  ][  j  ]     dp  [  i     -     1  ][  k  ]     +     abs  (  A  [  i  ]     -     j  ));      }      }         // return minimum value from last row of dp table      int     res     =     INT_MAX  ;         for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      res     =     min  (  res       dp  [  n     -     1  ][  j  ]);      return     res  ;   }   // Driver Program to test above functions   int     main  ()   {      int     arr  []     =     {  55       77       52       61       39       6       25       60       49       47  };      int     n     =     sizeof  (  arr  )     /     sizeof  (  arr  [  0  ]);      int     target     =     10  ;      cout      < <     'Minimum adjustment cost is '       < <     minAdjustmentCost  (  arr       n       target  )      < <     endl  ;      return     0  ;   }   
Java
   // Java program to find minimum adjustment cost of an array   import     java.io.*  ;   import     java.util.*  ;   class   GFG      {      public     static     int     M     =     100  ;          // Function to find minimum adjustment cost of an array      static     int     minAdjustmentCost  (  int     A  []       int     n       int     target  )      {      // dp[i][j] stores minimal adjustment cost on changing      // A[i] to j      int  [][]     dp     =     new     int  [  n  ][  M     +     1  ]  ;          // handle first element of array separately      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      dp  [  0  ][  j  ]     =     Math  .  abs  (  j     -     A  [  0  ]  );          // do for rest elements of the array      for     (  int     i     =     1  ;     i      <     n  ;     i  ++  )      {      // replace A[i] to j and calculate minimal adjustment      // cost dp[i][j]      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      {      // initialize minimal adjustment cost to INT_MAX      dp  [  i  ][  j  ]     =     Integer  .  MAX_VALUE  ;          // consider all k such that k >= max(j - target 0) and      // k  <= min(M j + target) and take minimum      int     k     =     Math  .  max  (  j  -  target    0  );      for     (     ;     k      <=     Math  .  min  (  M    j  +  target  );     k  ++  )      dp  [  i  ][  j  ]     =     Math  .  min  (  dp  [  i  ][  j  ]       dp  [  i     -     1  ][  k  ]     +         Math  .  abs  (  A  [  i  ]     -     j  ));      }      }             // return minimum value from last row of dp table      int     res     =     Integer  .  MAX_VALUE  ;         for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      res     =     Math  .  min  (  res       dp  [  n     -     1  ][  j  ]  );          return     res  ;      }          // Driver program      public     static     void     main     (  String  []     args  )         {      int     arr  []     =     {  55       77       52       61       39       6       25       60       49       47  };      int     n     =     arr  .  length  ;      int     target     =     10  ;          System  .  out  .  println  (  'Minimum adjustment cost is '      +  minAdjustmentCost  (  arr       n       target  ));      }   }   // This code is contributed by Pramod Kumar   
Python3
   # Python3 program to find minimum   # adjustment cost of an array    M   =   100   # Function to find minimum   # adjustment cost of an array   def   minAdjustmentCost  (  A     n     target  ):   # dp[i][j] stores minimal adjustment    # cost on changing A[i] to j    dp   =   [[  0   for   i   in   range  (  M   +   1  )]   for   i   in   range  (  n  )]   # handle first element   # of array separately   for   j   in   range  (  M   +   1  ):   dp  [  0  ][  j  ]   =   abs  (  j   -   A  [  0  ])   # do for rest elements    # of the array    for   i   in   range  (  1     n  ):   # replace A[i] to j and    # calculate minimal adjustment   # cost dp[i][j]    for   j   in   range  (  M   +   1  ):   # initialize minimal adjustment   # cost to INT_MAX   dp  [  i  ][  j  ]   =   100000000   # consider all k such that   # k >= max(j - target 0) and   # k  <= min(M j + target) and    # take minimum   for   k   in   range  (  max  (  j   -   target     0  )   min  (  M     j   +   target  )   +   1  ):   dp  [  i  ][  j  ]   =   min  (  dp  [  i  ][  j  ]   dp  [  i   -   1  ][  k  ]   +   abs  (  A  [  i  ]   -   j  ))   # return minimum value from    # last row of dp table   res   =   10000000   for   j   in   range  (  M   +   1  ):   res   =   min  (  res     dp  [  n   -   1  ][  j  ])   return   res   # Driver Code    arr  =   [  55     77     52     61     39     6     25     60     49     47  ]   n   =   len  (  arr  )   target   =   10   print  (  'Minimum adjustment cost is'     minAdjustmentCost  (  arr     n     target  )   sep   =   ' '  )   # This code is contributed    # by sahilshelangia   
C#
   // C# program to find minimum adjustment   // cost of an array   using     System  ;   class     GFG     {          public     static     int     M     =     100  ;          // Function to find minimum adjustment      // cost of an array      static     int     minAdjustmentCost  (  int     []  A       int     n        int     target  )      {          // dp[i][j] stores minimal adjustment      // cost on changing A[i] to j      int  []     dp     =     new     int  [  n    M     +     1  ];      // handle first element of array      // separately      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      dp  [  0    j  ]     =     Math  .  Abs  (  j     -     A  [  0  ]);      // do for rest elements of the array      for     (  int     i     =     1  ;     i      <     n  ;     i  ++  )      {      // replace A[i] to j and calculate      // minimal adjustment cost dp[i][j]      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      {      // initialize minimal adjustment      // cost to INT_MAX      dp  [  i    j  ]     =     int  .  MaxValue  ;      // consider all k such that       // k >= max(j - target 0) and      // k  <= min(M j + target) and      // take minimum      int     k     =     Math  .  Max  (  j     -     target       0  );          for     (     ;     k      <=     Math  .  Min  (  M       j     +      target  );     k  ++  )      dp  [  i    j  ]     =     Math  .  Min  (  dp  [  i    j  ]      dp  [  i     -     1    k  ]      +     Math  .  Abs  (  A  [  i  ]     -     j  ));      }      }         // return minimum value from last      // row of dp table      int     res     =     int  .  MaxValue  ;         for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      res     =     Math  .  Min  (  res       dp  [  n     -     1    j  ]);      return     res  ;      }          // Driver program      public     static     void     Main     ()         {      int     []  arr     =     {  55       77       52       61       39        6       25       60       49       47  };      int     n     =     arr  .  Length  ;      int     target     =     10  ;      Console  .  WriteLine  (  'Minimum adjustment'      +     ' cost is '      +     minAdjustmentCost  (  arr       n       target  ));      }   }   // This code is contributed by Sam007.   
JavaScript
    <  script  >      // Javascript program to find minimum adjustment cost of an array      let     M     =     100  ;          // Function to find minimum adjustment cost of an array      function     minAdjustmentCost  (  A       n       target  )      {          // dp[i][j] stores minimal adjustment cost on changing      // A[i] to j      let     dp     =     new     Array  (  n  );      for     (  let     i     =     0  ;     i      <     n  ;     i  ++  )      {      dp  [  i  ]     =     new     Array  (  n  );      for     (  let     j     =     0  ;     j      <=     M  ;     j  ++  )      {      dp  [  i  ][  j  ]     =     0  ;      }      }          // handle first element of array separately      for     (  let     j     =     0  ;     j      <=     M  ;     j  ++  )      dp  [  0  ][  j  ]     =     Math  .  abs  (  j     -     A  [  0  ]);          // do for rest elements of the array      for     (  let     i     =     1  ;     i      <     n  ;     i  ++  )      {      // replace A[i] to j and calculate minimal adjustment      // cost dp[i][j]      for     (  let     j     =     0  ;     j      <=     M  ;     j  ++  )      {      // initialize minimal adjustment cost to INT_MAX      dp  [  i  ][  j  ]     =     Number  .  MAX_VALUE  ;          // consider all k such that k >= max(j - target 0) and      // k  <= min(M j + target) and take minimum      let     k     =     Math  .  max  (  j  -  target    0  );      for     (     ;     k      <=     Math  .  min  (  M    j  +  target  );     k  ++  )      dp  [  i  ][  j  ]     =     Math  .  min  (  dp  [  i  ][  j  ]     dp  [  i     -     1  ][  k  ]     +         Math  .  abs  (  A  [  i  ]     -     j  ));      }      }             // return minimum value from last row of dp table      let     res     =     Number  .  MAX_VALUE  ;         for     (  let     j     =     0  ;     j      <=     M  ;     j  ++  )      res     =     Math  .  min  (  res       dp  [  n     -     1  ][  j  ]);          return     res  ;      }          let     arr     =     [  55       77       52       61       39       6       25       60       49       47  ];      let     n     =     arr  .  length  ;      let     target     =     10  ;      document  .  write  (  'Minimum adjustment cost is '      +  minAdjustmentCost  (  arr       n       target  ));          // This code is contributed by decode2207.    <  /script>   
PHP
      // PHP program to find minimum    // adjustment cost of an array   $M   =   100  ;   // Function to find minimum    // adjustment cost of an array   function   minAdjustmentCost  (   $A     $n     $target  )   {   // dp[i][j] stores minimal    // adjustment cost on changing   // A[i] to j   global   $M  ;   $dp   =   array  (  array  ());   // handle first element    // of array separately   for  (  $j   =   0  ;   $j    <=   $M  ;   $j  ++  )   $dp  [  0  ][  $j  ]   =   abs  (  $j   -   $A  [  0  ]);   // do for rest    // elements of the array   for  (  $i   =   1  ;   $i    <   $n  ;   $i  ++  )   {   // replace A[i] to j and    // calculate minimal adjustment   // cost dp[i][j]   for  (  $j   =   0  ;   $j    <=   $M  ;   $j  ++  )   {   // initialize minimal adjustment   // cost to INT_MAX   $dp  [  $i  ][  $j  ]   =   PHP_INT_MAX  ;   // consider all k such that    // k >= max(j - target 0) and   // k  <= min(M j + target) and   // take minimum   for  (  $k   =   max  (  $j   -   $target     0  );   $k    <=   min  (  $M     $j   +   $target  );   $k  ++  )   $dp  [  $i  ][  $j  ]   =   min  (  $dp  [  $i  ][  $j  ]   $dp  [  $i   -   1  ][  $k  ]   +   abs  (  $A  [  $i  ]   -   $j  ));   }   }   // return minimum value    // from last row of dp table   $res   =   PHP_INT_MAX  ;   for  (  $j   =   0  ;   $j    <=   $M  ;   $j  ++  )   $res   =   min  (  $res     $dp  [  $n   -   1  ][  $j  ]);   return   $res  ;   }   // Driver Code   $arr   =   array  (  55     77     52     61     39     6     25     60     49     47  );   $n   =   count  (  $arr  );   $target   =   10  ;   echo   'Minimum adjustment cost is '      minAdjustmentCost  (  $arr     $n     $target  );   // This code is contributed by anuj_67.   ?>   

الإخراج
Minimum adjustment cost is 75 

تعقيد الوقت: يا (ن * م 2 )
المساحة المساعدة: يا (ن * م)


النهج الفعال : تحسين المساحة

في النهج السابق القيمة الحالية موانئ دبي [أنا] [ي] يعتمد فقط على قيم الصف الحالية والسابقة لـ موانئ دبي . لذا، لتحسين تعقيد المساحة، نستخدم مصفوفة أحادية الأبعاد لتخزين الحسابات.

خطوات التنفيذ:

  • إنشاء ناقل 1D موانئ دبي من الحجم م+1 .
  • قم بتعيين حالة أساسية عن طريق تهيئة قيم موانئ دبي .
  • قم الآن بالتكرار على المشكلات الفرعية بمساعدة الحلقة المتداخلة واحصل على القيمة الحالية من الحسابات السابقة.
  • الآن قم بإنشاء متجه 1D مؤقت prev_dp تستخدم لتخزين القيم الحالية من الحسابات السابقة.
  • بعد كل تكرار قم بتعيين قيمة prev_dp إلى dp لمزيد من التكرار.
  • تهيئة متغير الدقة لتخزين الإجابة النهائية وتحديثها بالتكرار عبر Dp.
  • في العودة الأخيرة وطباعة الإجابة النهائية المخزنة في الدقة .

تطبيق: 
 

C++
   #include          using     namespace     std  ;   #define M 100   // Function to find minimum adjustment cost of an array   int     minAdjustmentCost  (  int     A  []     int     n       int     target  )   {      int     dp  [  M     +     1  ];     // Array to store the minimum adjustment costs for each value      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      dp  [  j  ]     =     abs  (  j     -     A  [  0  ]);     // Initialize the first row with the absolute differences      for     (  int     i     =     1  ;     i      <     n  ;     i  ++  )     // Iterate over the array elements      {      int     prev_dp  [  M     +     1  ];      memcpy  (  prev_dp       dp       sizeof  (  dp  ));     // Store the previous row's minimum costs      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )     // Iterate over the possible values      {      dp  [  j  ]     =     INT_MAX  ;     // Initialize the current value with maximum cost      // Find the minimum cost by considering the range of previous values      for     (  int     k     =     max  (  j     -     target       0  );     k      <=     min  (  M       j     +     target  );     k  ++  )      dp  [  j  ]     =     min  (  dp  [  j  ]     prev_dp  [  k  ]     +     abs  (  A  [  i  ]     -     j  ));      }      }      int     res     =     INT_MAX  ;      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      res     =     min  (  res       dp  [  j  ]);     // Find the minimum cost in the last row      return     res  ;     // Return the minimum adjustment cost   }   int     main  ()   {      int     arr  []     =     {  55       77       52       61       39       6       25       60       49       47  };      int     n     =     sizeof  (  arr  )     /     sizeof  (  arr  [  0  ]);      int     target     =     10  ;      cout      < <     'Minimum adjustment cost is '       < <     minAdjustmentCost  (  arr       n       target  )      < <     endl  ;      return     0  ;   }   
Java
   import     java.util.Arrays  ;   public     class   MinimumAdjustmentCost     {      static     final     int     M     =     100  ;      // Function to find the minimum adjustment cost of an array      static     int     minAdjustmentCost  (  int  []     A       int     n       int     target  )     {      int  []     dp     =     new     int  [  M     +     1  ]  ;      // Initialize the first row with absolute differences      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )     {      dp  [  j  ]     =     Math  .  abs  (  j     -     A  [  0  ]  );      }      // Iterate over the array elements      for     (  int     i     =     1  ;     i      <     n  ;     i  ++  )     {      int  []     prev_dp     =     Arrays  .  copyOf  (  dp       dp  .  length  );     // Store the previous row's minimum costs      // Iterate over the possible values      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )     {      dp  [  j  ]     =     Integer  .  MAX_VALUE  ;     // Initialize the current value with maximum cost      // Find the minimum cost by considering the range of previous values      for     (  int     k     =     Math  .  max  (  j     -     target       0  );     k      <=     Math  .  min  (  M       j     +     target  );     k  ++  )     {      dp  [  j  ]     =     Math  .  min  (  dp  [  j  ]       prev_dp  [  k  ]     +     Math  .  abs  (  A  [  i  ]     -     j  ));      }      }      }      int     res     =     Integer  .  MAX_VALUE  ;      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )     {      res     =     Math  .  min  (  res       dp  [  j  ]  );     // Find the minimum cost in the last row      }      return     res  ;     // Return the minimum adjustment cost      }      public     static     void     main  (  String  []     args  )     {      int  []     arr     =     {     55       77       52       61       39       6       25       60       49       47     };      int     n     =     arr  .  length  ;      int     target     =     10  ;      System  .  out  .  println  (  'Minimum adjustment cost is '     +     minAdjustmentCost  (  arr       n       target  ));      }   }   
Python3
   def   min_adjustment_cost  (  A     n     target  ):   M   =   100   dp   =   [  0  ]   *   (  M   +   1  )   # Initialize the first row of dp with absolute differences   for   j   in   range  (  M   +   1  ):   dp  [  j  ]   =   abs  (  j   -   A  [  0  ])   # Iterate over the array elements   for   i   in   range  (  1     n  ):   prev_dp   =   dp  [:]   # Store the previous row's minimum costs   for   j   in   range  (  M   +   1  ):   dp  [  j  ]   =   float  (  'inf'  )   # Initialize the current value with maximum cost   # Find the minimum cost by considering the range of previous values   for   k   in   range  (  max  (  j   -   target     0  )   min  (  M     j   +   target  )   +   1  ):   dp  [  j  ]   =   min  (  dp  [  j  ]   prev_dp  [  k  ]   +   abs  (  A  [  i  ]   -   j  ))   res   =   float  (  'inf'  )   for   j   in   range  (  M   +   1  ):   res   =   min  (  res     dp  [  j  ])   # Find the minimum cost in the last row   return   res   if   __name__   ==   '__main__'  :   arr   =   [  55     77     52     61     39     6     25     60     49     47  ]   n   =   len  (  arr  )   target   =   10   print  (  'Minimum adjustment cost is'     min_adjustment_cost  (  arr     n     target  ))   
C#
   using     System  ;   class     Program   {      const     int     M     =     100  ;      // Function to find minimum adjustment cost of an array      static     int     MinAdjustmentCost  (  int  []     A       int     n       int     target  )      {      int  []     dp     =     new     int  [  M     +     1  ];     // Array to store the minimum adjustment costs for each value      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      {      dp  [  j  ]     =     Math  .  Abs  (  j     -     A  [  0  ]);     // Initialize the first row with the absolute differences      }      for     (  int     i     =     1  ;     i      <     n  ;     i  ++  )     // Iterate over the array elements      {      int  []     prevDp     =     (  int  [])  dp  .  Clone  ();     // Store the previous row's minimum costs      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )     // Iterate over the possible values      {      dp  [  j  ]     =     int  .  MaxValue  ;     // Initialize the current value with maximum cost      // Find the minimum cost by considering the range of previous values      for     (  int     k     =     Math  .  Max  (  j     -     target       0  );     k      <=     Math  .  Min  (  M       j     +     target  );     k  ++  )      {      dp  [  j  ]     =     Math  .  Min  (  dp  [  j  ]     prevDp  [  k  ]     +     Math  .  Abs  (  A  [  i  ]     -     j  ));      }      }      }      int     res     =     int  .  MaxValue  ;      for     (  int     j     =     0  ;     j      <=     M  ;     j  ++  )      {      res     =     Math  .  Min  (  res       dp  [  j  ]);     // Find the minimum cost in the last row      }      return     res  ;     // Return the minimum adjustment cost      }      static     void     Main  ()      {      int  []     arr     =     {     55       77       52       61       39       6       25       60       49       47     };      int     n     =     arr  .  Length  ;      int     target     =     10  ;      Console  .  WriteLine  (  'Minimum adjustment cost is '     +     MinAdjustmentCost  (  arr       n       target  ));      }   }   
JavaScript
   const     M     =     100  ;   // Function to find minimum adjustment cost of an array   function     minAdjustmentCost  (  A       n       target  )     {      let     dp     =     new     Array  (  M     +     1  );     // Array to store the minimum adjustment costs for each value      for     (  let     j     =     0  ;     j      <=     M  ;     j  ++  )      dp  [  j  ]     =     Math  .  abs  (  j     -     A  [  0  ]);     // Initialize the first row with the absolute differences      for     (  let     i     =     1  ;     i      <     n  ;     i  ++  )     // Iterate over the array elements      {      let     prev_dp     =     [...  dp  ];     // Store the previous row's minimum costs      for     (  let     j     =     0  ;     j      <=     M  ;     j  ++  )     // Iterate over the possible values      {      dp  [  j  ]     =     Number  .  MAX_VALUE  ;     // Initialize the current value with maximum cost      // Find the minimum cost by considering the range of previous values      for     (  let     k     =     Math  .  max  (  j     -     target       0  );     k      <=     Math  .  min  (  M       j     +     target  );     k  ++  )      dp  [  j  ]     =     Math  .  min  (  dp  [  j  ]     prev_dp  [  k  ]     +     Math  .  abs  (  A  [  i  ]     -     j  ));      }      }      let     res     =     Number  .  MAX_VALUE  ;      for     (  let     j     =     0  ;     j      <=     M  ;     j  ++  )      res     =     Math  .  min  (  res       dp  [  j  ]);     // Find the minimum cost in the last row      return     res  ;     // Return the minimum adjustment cost   }   let     arr     =     [  55       77       52       61       39       6       25       60       49       47  ];   let     n     =     arr  .  length  ;   let     target     =     10  ;   console  .  log  (  'Minimum adjustment cost is '     +     minAdjustmentCost  (  arr       n       target  ));   // This code is contributed by Kanchan Agarwal   


الإخراج

 Minimum adjustment cost is 75   

تعقيد الوقت: يا (ن * م 2 )
المساحة المساعدة: يا (م)