程式設計之美 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部電梯。在高峰時間,每層都有人上下,電梯每層都停。實習生小飛常常會被每層都停的電梯弄的很不耐煩,於是他提出了這樣乙個辦法 由於樓層並不算太高,那麼在繁忙的上下班時間,每次電梯從一層往上走時,我們只允許電梯停在其中的某一層。所有乘客從一樓上電梯,到達...