程式設計之美 小飛的電梯排程(k次停留)

2021-06-26 04:33:26 字數 1313 閱讀 7822

問題.有一棟樓,一共有n層,要去每一層的人分別是a[1],a[2]....a[n],如果電梯可以停k次,問停在哪k層讓所有人走的矩離最短?

解題思路參考:

這裡通過動態規劃來求解,其中map[i][j]記錄了考慮在1層到j層停留i次時的最優結果,minfloors[i][j]記錄了i層到j層間只停留一次時的最優結果。當i = 1時,map[1][j]的值即為minfloors[1][j]的值,當i > 1時,其轉移方程為map[i][j] = max,其中1 <= k <= j。以下是具體**:

int func1(int *list, int startfloor, int endfloor)

int ret = 0;

int n1 = 0, n2 = list[startfloor], n3 = 0;

for(int i = startfloor + 1; i <= endfloor; i ++)

for(int i = startfloor + 1; i <= endfloor; i ++) else

}return ret;

}void func2(int *list, int floor, int times, int &minfloor)

}if(cnt <= times)

int map[len][len];             //map[i][j] 表示對於需要在1-j層下的乘客在停i次的情況下的最優值;

int minfloors[len][len];           //minfloor[i][j]表示在i層到j層下的乘客在停1次的情況下的最優值。

for(int i = 1; i <= floor; i ++)

}for(int i = 1; i <= floor; i ++)

int temp = inf;

for(int i = 2; i <= times; i ++)

}map[i][j] = temp;}}

minfloor = map[times][floor];

}int main(void)

int n;

cin >> n;

int floor, times;

cin >> floor >> times;

int stopfloor, peoplenum;

for(int i = 0; i < n; i++)

int minfloor;

func2(list, floor, times, minfloor);

cout << minfloor << endl;

return 0;

}

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

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

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

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

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

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