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
廣告