电梯调度问题
想不到更优的算法+数据小=穷竭搜索。GitHub存储库
最开始想用5个for语句把电梯移动的地点进行全排列,发现接到人以后电梯又会新增新的要停靠的楼层。然后想到用深搜。
思路
开始时把5人原来的楼层设置为目标楼层。
从当前楼层开始:选择一个目标楼层(可以是当前楼层),去目标楼层接人或者放人。
如果是放人:计算移动到目标楼层的耗时,记录下放下的人出电梯的时刻。更新时刻再次移动。
如果是接人:计算移动到目标楼层的耗时,新增一个目标楼层,更新时刻(选择请求出现时刻和当前时候更晚的那个),再次移动。
如此重复,直到所有目标楼层都到达过。判断耗时。更新最小耗时和移动方案。
这个算法时间复杂度非常高。
测试数据
0 1 0 0 2 0 0 4 0 0 6 0 0 8 0
1 2 3
4 5 6
7 8 9
0 1 2
3 4 5
10 1 0
7 8 0
9 4 7
100 4 5
6 0 4
32 6 4
7 9 0
4 5 0
1000 6 5
1 2 3
0 1 0
5 5 6
7 6 8
3 1 4
7 9 7
0 0 1
手算了第一组数据,是对的。为什么不算别的组?
代码行数 | bug数 | 耗时 |
84 | >=10 | >=5h |
Pintia小作业