C++ 程式碼,用於計算第一個堆疊上乾草堆的最大值


假設我們有一個包含 n 個元素的陣列 A 和另一個值 d。一個農民在農場上排列了 n 個乾草堆。第 i 個堆疊包含 A[i] 個乾草堆。每天,奶牛可以選擇將任何堆疊中的一個乾草堆移至相鄰的堆疊。奶牛可以這樣做,也可以什麼都不做。奶牛希望在 d 天內將第一個堆疊中的乾草堆數量最大化。我們必須計算第一個堆疊上的乾草堆的最大數量。

因此,如果輸入為 d = 5; A = [1, 0, 3, 2],則輸出將為 3,因為在第一天從第 3 個移動到第 2 個,在第二天再從第 3 個移動到第 2 個,然後在接下來的兩天,將第 2 個傳遞到第 1 個。

步驟

為了解決這個問題,我們將遵循以下步驟 −

a0 := A[0]
n := size of A
for initialize i := 1, when i < n, update (increase i by 1), do:
   ai := A[i]
   w := minimum of ai and d / i
   a0 := a0 + w
   d := d - w * i
return a0

示例

讓我們看看以下實施,以獲得更好的理解 −

#include <bits/stdc++.h>
using namespace std;
int solve(int d, vector<int> A){
   int a0 = A[0];
   int n = A.size();
   for (int i = 1; i < n; i++){
      int ai = A[i];
      int w = min(ai, d / i);
      a0 += w;
      d -= w * i;
   }
   return a0;
}
int main(){
   int d = 5;
   vector<int> A = { 1, 0, 3, 2 };
   cout << solve(d, A) << endl;
}

輸入

5, { 1, 0, 3, 2 }

輸出

3

更新於: 15-03-2022

114 次瀏覽

開啟 職業生涯

完成課程並獲得認證

開始
廣告
© . All rights reserved.