排班问题,说说算法就可以了,急啊

来源:百度知道 编辑:UC知道 时间:2024/06/25 03:22:10
公司给出了一个月30天每天需要的员工数,1,2,3号上班的员工总共工作16天,在这其中可休息一天,4,5,6号上班的员工总共工作18天,在这其中可选两天休息,17号开始上班的员工总共工作13天,在这其中可选1天休息
但都得连续工作8天后才能休息
用什么算法才能使公司成本最低呢,用什么算法呢?
对,是公司员工最少
19,32,35,。。。。56,73,43,43,23,。。。。这数据有关系吗,说的是算法

什么公司成本最低啊?是不是说所需的员工数最少?可每天需要多少员工啊?
问员工数是想确定一下有没有什么特殊的地方。
我下面写的楼主如果看不明白,那我就没办法了,其实这个最好是要知道每天的员工数,因为这个算法虽然简单,可是算起来很麻烦。我写着也不大会写。如果知道员工数,我就可以直接把它做出来。
1号开始上班的上到17号,2号的到18号,3号的到19号,8天后选一天休息(这一天应该是公司定的吧,如果是职员自己选,又要另写)。4号上到23号,5号24号,6号25号,可选两天休息。17号上到30号,选一天休息。
17号开始工作的人,至少要工作到24号。就是说最早也要25号开始休息,25号就只有6号上班的人可以替他们。在26号到30号这几天选一天人数最大的,记为a,就是17号开始上班的人数。如果,26号到30号剩下几天休息的时间排不开,那就要将a加1(不一定是加1,不过看楼主给的数字一般加1也就够了。要是加1了还排不开,就加2 ,一直到能把休息时间排开为止)。然后把17号开始上班的数记为a(就像计算机一样,我不想再设一个数来表示它)。
然后,6号的上班人数记为b,a+b大于等于25号的人数,否则25号人不够。设5号上班的人为c,4号上班的人为d,那么a+b+c大于等于24号的人数,a+b+c+d大于等于20号到23号中的最大人数,然后就分配假期,分不了就加一个人,直到能分好。当然,也要重新定义bcd,为下面的步骤做准备,我就不啰嗦了。
再考虑123号的。定义3号人数为e,2号为f,1号为g。e+d+c+b+a要大于等于19号,f+e+d+c+b+a大于等于18号,g+f+e+d+c+b+a大于等于17号。同样,g+f+e+d+c+b要大于等于6号到16号之间的最大人数。g+f+e+d+c大于等于5号的人数,g+f+e+d大于等于4号人数,g+f+e大于等于3号人数,g+f大于等于2号人数,g大于等于一号人数。然后排假。
我上面写的大于等于在一段后面就是要变成等于的,楼主应该能看明白吧?反正就是这样排,这其实就是一个简单的计算机算法(我写的不像而已)。

要是楼主看不明白,你就把每天的数据发上来,我给我做。

ds