有人问我一个问题,要我写一个优化的程序,这个程序将决定一部电梯服务于x个人数的总停站次数。问题描述如下。
在一幢有m层的大楼里有一部电梯,这部电梯一次最多可载x人,或者总重量最大为y。假设一组人已经到达,并且他们的重量和他们需要停下来的楼层,假设电梯已经停了多少站来服务所有的人。考虑电梯服务在先到先得的基础上。
例如,让数组A作为要考虑的人的权重
a[]={60,80,40}
让数组B分别作为需要人员下车的楼层
B[]={2,3,5}
总建筑层数为5层,电梯最大允许人数为2人,最大载重量为200
在这个例子中,电梯总共要停5层楼地面,2,3,地面,5,地面
这方面的最佳代码是什么?
我的解决方案如下。还有其他更好的解决方案吗?

class Solution
{
    /// <summary>
    /// Return total stops used
    /// </summary>
    /// <param name="A">weight of people</param>
    /// <param name="B">floors they need to get down</param>
    /// <param name="M">total floors in the building</param>
    /// <param name="X">Max people to carry at a time</param>
    /// <param name="Y">max weight to carry at a time</param>
    /// <returns></returns>
    public int solution(int[] A, int[] B, int M, int X, int Y)
    {
        // write your code in C# 6.0 with .NET 4.5 (Mono)
        int totalStops = 0;
        long totalWeightPerRound = 0;
        int maxPersonsCount = 0;
        List<int> lstFloors = new List<int>();
        int currPerson = 0;
        bool startLift = false;
        while (currPerson < A.Length)
        {
            if ((totalWeightPerRound + A[currPerson]) <= Y && (maxPersonsCount+1) <= X)
            {
                totalWeightPerRound += A[currPerson];
                maxPersonsCount++;
                lstFloors.Add(B[currPerson]);
                if (currPerson == A.Length - 1)
                    startLift = true;

                currPerson++;
            }
            else
            {
                startLift = true;
            }

            if (startLift)
            {
                totalStops += lstFloors.Distinct().Count() + 1;
                lstFloors.Clear();
                maxPersonsCount = 0;
                totalWeightPerRound = 0;
                startLift = false;
            }
        }

        return totalStops;
    }
}

最佳答案

也许有点离题,但正如上面有人所说,这是一个数学问题,而不是一个编程问题。为了安全起见,您应该构造一个描述要最小化的成本函数的函数,添加约束以包含边界条件,最后计算变化以获得极值。
换言之,这是一项非琐碎的数学任务,甚至在试图编写一行代码之前,你都应该把精力放在正确的数学上。优化意味着得到最优解,而不仅仅是某个解;)

关于c# - 确定电梯总停靠点的程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33885921/

10-09 08:08