亞洲微軟研究院所在的希格瑪大廈一共有6部電梯。在高峰時間,每層都有人上下,電梯每層都停。實習生小飛常常會被每層都停的電梯弄的很不耐煩,於是他提出了這樣乙個辦法:
由於樓層並不算太高,那麼在繁忙的上下班時間,每次電梯從一層往上走時,我們只允許電梯停在其中的某一層。所有乘客從一樓上電梯,到達某層後,電梯停下來,所有乘客再從這裡爬樓梯到自己的目的層。在一樓的時候,每個乘客選擇自己的目的層,電梯則計算出應停的樓層。
問:電梯停在哪一層樓,能夠保證這次乘坐電梯的所有乘客爬樓梯的層數之和最少?
解法1:直接列舉暴力
解法2:時間可優化到o(n)
直覺反應,電梯在前面的狀態對後面的狀態有影響。粘帶效應啊,很多題目都這樣子~~
紅色代表停靠樓層,n1表示目的地在停靠樓層之下的人數,n2表示目的地在停靠樓層的人數,n3表示之上的人數。
設電梯在第i層停時,乘客走的總樓層數為x。若電梯在第i+1停靠時,乘客走的總樓層數為x'=x+n1+n2-n3 (低於的每人多走一層,高於的每人少走一層)
所以,要想總走樓層變少,只需保證y=n3-(n1+n2)>0,且y隨著電梯的上公升而減少,當y<0時,表示已經處在最佳樓層!
code:
//初始化,第一層時
int n1=0
;int n2=1
;int n3=0
;int sum=0
;for(int i=2;i<=n;i++)
for(int i=2;i<=2;i++)
else
break; //
一旦不符合,將後都不可能符合
}
1 8 小飛的電梯排程演算法
題目 有一棟樓,現在設計一種電梯排程演算法 電梯在一樓讓大家上電梯,然後根據大家選擇要到的樓層算出某一樓層i,電梯在i層停下讓所有人下電梯,然後大家爬樓梯達到自己的樓層。請問電梯停在哪一層,可以使得這一次的所有乘客爬樓層之和最短?一 最直接最簡單的方法就是直接列舉從第一層到最後一層,然後算出電梯停在...
1 8 小飛的電梯排程演算法
題目 有一棟樓,如今設計一種電梯排程演算法 電梯在一樓讓大家上電梯,然後依據大家選擇要到的樓層算出某一樓層i,電梯在i層停下讓全部人下電梯,然後大家爬樓梯達到自己的樓層。請問電梯停在哪一層。能夠使得這一次的全部乘客爬樓層之和最短?一 最直接最簡單的方法就是直接列舉從第一層到最後一層,然後算出電梯停在...
程式設計之美 1 8 小飛的電梯排程演算法
程式設計之美 1.8 小飛的電梯排程演算法 亞洲微軟研究院所在的希格瑪大廈一共有6部電梯。在高峰時間,每層都有人上下,電梯每層都停。實習生小飛常常會被每層都停的電梯弄的很不耐煩,於是他提出了這樣乙個辦法 由於樓層並不算太高,那麼在繁忙的上下班時間,每次電梯從一層往上走時,我們只允許電梯停在其中的某一...