日期:2014-05-20  浏览次数:20686 次

一道调度问题
某电站24小时需要员工站岗,已知每个员工能够持续工作8个小时,而电站某一时段需要最少的员工数目如下:

0-4 :5人。
4-8 :10人。
8-12 :7人。
12-16 :6人。
16-20 :8人。
20-24 :4人。

求该电站应如何安排才能使一天内所派员工人数最少?

------解决方案--------------------
如果每人每天只工作8小时的话则需要20人。算法如下:
A[6]存放规定站岗人数5,10,7,6,8,4,A从1开始。
令f(i)表示i*4到i*4+4时间段需要增加的人数,g(i)表示在上一时间段工作且能继续工作的人数
则有f(i+1)=A[i+1]+g(i),因为工人可以连续工作两个时间段,则有f(i)=g(i)
所以f(i+1)=A[i+1]-f(i),f(1)=5,把A[i]这个代入,可得5,5,2,4,4,0.
所以需要20个人。

------解决方案--------------------
是f(i+1)=A[i+1]-g(i)
打错了。。
------解决方案--------------------
好难啊。
------解决方案--------------------
是不是叫作 动态规划

------解决方案--------------------
是很晕。能解释下就好了
------解决方案--------------------
是很晕。能解释下就好了
------解决方案--------------------

------解决方案--------------------
我是新手啊~~刚自学了十多天,试做一做,写得不好的地方大家不要介意啊~~~
class diaodu
{
public static void main(String [] args)
{
int[] arr={5,10,7,6,8,4};
haha.diao(arr);
}
}
class haha
{
public static void diao(int[] arr)
{
int sum=0;int ren=0,y=0;
for(int x=0;x<24 && y<arr.length;x=x+4)
{
ren=arr[y++]-ren;
sum+=ren;
System.out.println(x+"-"+(x+4)+"时段需要增加"+ren);
}
System.out.println("一天总共需要"+sum+"人");
}
}

------解决方案--------------------
说实话这道题要写代码有点困难,不过他们那么说答案,我知道有种答案刚好人不多不少,如果换了数据怎么整,还要是写代码实现的
难点1:有没有起始点,如果有起始好算一点,大不了每个起始点写一遍。如果没有起始点,就是说随意穿插,很难入手。
难点2:每个人要连续工作两个时区,怎么建模。有必要的话,时区也要建个实体类。不知你这程序是要这种功能?
------解决方案--------------------
285*4+10*4+7*4+6*4+8*4+4*4=160小时人,每人每天8小时,那么最少就是20人 
 
------解决方案--------------------
Java code

光这道题就有两种情况
5-5                            
--5-5
----2-2
------4-4
--------4-4
------------
5-10-7-6-8-4


3-3
--7-7
------6-6
--------2-2
----------2-2//接上面
-------------
5-10-7-6-8-4