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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP