#620. 餐厅排队叫号
餐厅排队叫号
餐厅排队叫号
故事背景
一家热门餐厅采用“叫号排队”的方式招待顾客。每一位顾客点餐后,厨师需要一段时间来完成这位顾客的菜品。不同顾客的菜品复杂度不同,所需处理时间也不同。
店长希望合理安排出菜顺序,让所有顾客的总等待时间尽可能短,这样大家的体验会更好。你需要根据每位顾客的处理时间,帮助店长设计一个出菜顺序。
题目描述
共有 位顾客在排队,第 位顾客的订单需要 分钟完成。假设:
- 厨房一次只能处理一位顾客的订单;
- 一旦开始做某位顾客的菜,中途不能中断;
- 第一个被服务的顾客等待时间为 0 分钟;
- 每位顾客的等待时间等于在他之前所有顾客订单处理时间之和。
你可以自行决定出菜顺序。请计算,在最优安排下,所有顾客等待时间之和的最小值。
输入格式
- 第一行包含一个整数 ,表示顾客数量。
- 第二行包含 个整数,其中第 个为 ,表示第 位顾客订单所需时间。
输出格式
- 输出一行,一个整数,为在最优安排下所有顾客等待时间之和的最小值。
输入输出样例 #1
输入 #1
4
3 1 4 2
输出 #1
10
样例解释 #1
一种最优安排是将处理时间按升序排序:1、2、3、4。
- 第 1 位顾客等待时间为 0;
- 第 2 位顾客等待时间为 1;
- 第 3 位顾客等待时间为 1 + 2 = 3;
- 第 4 位顾客等待时间为 1 + 2 + 3 = 6。
总等待时间为 ,这是所有安排中可能的最小值。
说明/提示
- 对于所有测试数据,保证 。
- 每位顾客的处理时间满足 。
- 输出结果可能较大,请使用 64 位整数类型存储。