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