Python程式:計算摩天輪最大利潤所需的最少旋轉次數
假設有一個摩天輪,有四個座艙,每個座艙可容納四名乘客。摩天輪逆時針旋轉,每次旋轉需要花費“run”金額。現在我們有一個數組“cust”,包含n個專案,每個專案i表示在第i次旋轉前等待進入摩天輪的人數。為了登上摩天輪,每位顧客必須支付“board”金額,該金額用於摩天輪一次逆時針旋轉。排隊等待的人如果摩天輪有任何空位,則不應該等待。因此,給定資料,我們必須找出所需的最少旋轉次數,以便利潤最大化。

因此,如果輸入類似於 cust = [6,4],board = 6,run = 4,則輸出為 3
首先,有6人在排隊。所以首先4人進入第一個座艙,其餘的人等待下一個座艙。
摩天輪旋轉,第二個座艙到達。同時,又有4人排隊。所以接下來等待的4人進入下一個座艙。
摩天輪再次旋轉,剩餘的三名顧客進入下一個座艙。
因此,最少需要三次旋轉才能服務所有顧客。
從這些旋轉中獲得的最大利潤是 (10 * 6) - (3 * 4) = 48。
為了解決這個問題,我們將遵循以下步驟:
res := -1
mst := 0
tmp := 0
wt := 0
對於cust中的每個索引idx和值val,執行:
wt := wt + val
chg := min(4, wt)
wt := wt - chg
tmp := tmp + chg * board - run
如果 mst < tmp,則:
res := idx + 1
mst := tmp
x := wt / 4
y := wt % 4
如果 4 * board > run,則:
res := res + x
如果 y * board > run,則:
res := res + 1
返回 res
示例
讓我們看看下面的實現來更好地理解
def solve(cust, board, run):
res = -1
mst = 0
tmp = 0
wt = 0
for idx, val in enumerate(cust):
wt += val
chg = min(4, wt)
wt -= chg
tmp += chg * board - run
if mst < tmp:
res, mst = idx+1, tmp
x, y = divmod(wt, 4)
if 4 * board > run:
res += x
if y * board > run:
res += 1
return res
print(solve([6,4], 6, 4))輸入
[6,4], 6, 4
輸出
3
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP