程式設計之美 1 8 小飛的電梯排程演算法

2021-06-27 05:10:33 字數 1164 閱讀 3725

程式設計之美 1.8 小飛的電梯排程演算法

亞洲微軟研究院所在的希格瑪大廈一共有6部電梯。在高峰時間,每層都有人上下,電梯每層都停。

實習生小飛常常會被每層都停的電梯弄的很不耐煩,於是他提出了這樣乙個辦法:

由於樓層並不算太高,那麼在繁忙的上下班時間,每次電梯從一層往上走時,我們只允許電梯停在其中的某一層。

所有乘客從一樓上電梯,到達某層後,電梯停下來,所有乘客再從這裡爬樓梯到自己的目的層。在一樓的時候,每個乘客選擇自己的目的層,電梯則計算出應停的樓層。

問:電梯停在哪一層樓,能夠保證這次乘坐電梯的所有乘客爬樓梯的層數之和最少?

暴力列舉法。從第1層列舉到第n層,求出電梯在x層停的話,所有乘客需要怕多少層樓。

求出最少的那層即可。

int nperson;//到第i層的人數

int tar=-1;

for(i=1;i<=n;i++)//列舉每一層為目標層

}

動態規劃

假設電梯停在第x層,已知目的樓層在x層的有n2人,在x層以下的有n1人,在x層以上的有n3人。此時總花費為sum。

則往上走一層的話,i變為i+1層時,n1,n2要上走一層,n3少走層,總花費變為sum+n2+n1-n3。

則:n2+n1-n3>0,則i層比i+1層好,不必向上; 

那麼初始狀態電梯停在第一層,向上dp,開始時n2+n1-n3<0,sum越來越小,

直到某一層n2+n1>=n3,就沒有必要在往上走了。這時已求出最合適的樓層了。

int n;

int nperson;

int target_floor=1;

int min_floors=0;

int n1=0,n2=nperson[1],n3=0;

for(i=2;i<=n;i++)//預處理 求n3和min

for(i=2;i<=n;i++)

return left;

1、如果往上爬樓梯比較累,往下走較容易,假設往上走一層耗費k單位的能量,往下走一層只耗費1單位的能量。

這個跟解法二動態規劃一樣,只是i到i+1層時,向上爬累要乘k,(n1+n2)*k-n3

只是i到i-1層,n3+n2-n1*k 

所以只要把**中(n1+n2

2.停k層的解法

沒仔細研究:

程式設計之美 1 8小飛的電梯排程演算法

題目 亞洲微軟研究院所在的希格瑪大廈一共有6部電梯。在高峰時間,每層都有人上下,電梯每層都停。實習生小飛常常會被每層都停的電梯弄的很不耐煩,於是他提出了這樣乙個辦法 由於樓層並不算太高,那麼在繁忙的上下班時間,每次電梯從一層往上走時,我們只允許電梯停在其中的某一層。所有乘客從一樓上電梯,到達某層後,...

程式設計之美 小飛的電梯排程演算法

public class aptelevator person i 表示要到第i層的人數 elevator.opt person system.out.println elevator.targetfloor elevator.minstairs public aptelevator public ...

程式設計之美 小飛的電梯排程演算法

一.問題描述 亞洲微軟研究院所在的希格瑪大廈一共有6部電梯。在高峰時間,每層都有人上下,電梯每層都停。實習生小飛常常會被每層都停的電梯弄的很不耐煩,於是他提出了這樣乙個辦法 由於樓層並不算太高,那麼在繁忙的上下班時間,每次電梯從一層往上走時,我們只允許電梯停在其中的某一層。所有乘客從一樓上電梯,到達...