首先题目里的每个人按优先级选工作的表达是不准确的,正确的说法是:让每个人都尽量选自己最熟悉的工作,并且如果一个人没找到自己最熟悉的工作的话,则要把挑选机会让给下一个人,而不是继续找自己下一个熟悉的工作.
举个例子
假定每个人的技能数都是5个,那么最坏情况下要经过5轮才能每个人都分配到工作,
也就是第一轮让每个人都尽量选自己最熟悉的工作,如果都找到了,则循环结束。否则没有找到工作的人进行第2轮挑选,
选的是自己第二熟悉的工作,依次类推.
给个实际数据,假定有两个业务员A和B,各自的技能列表为
A:{4 3 1 2}
B:{1 2 3}
那么,当有工作2要被分配的时候,最需要经过两轮挑选,最终分配给B
下面是测试数据
15
1 68 36 23 2
2 9 6 19 60
3 67 10 6 49
4 49 44 23 66
5 81 8 18 35
6 99 85 85 75
7 94 75 94 96
8 29 7 67 28
9 100 95 11 89
10 29 16 10 29
11 32 55 10 15
12 70 48 4 84
13 100 36 63 73
14 42 93 28 47
15 100 35 2 73
3
1 13 1 2 3 4 5 6 7 8 9 11 12 13 14
2 10 2 3 4 5 9 10 11 12 14 15
3 11 1 2 3 4 5 6 7 9 13 14 15
0
最终花费的时间为13899
下面是ac代码
#include
#include
#include
#include
#include
#include
#include
#include
下面是部分中间日志,以便对拍.第一列为时间点,第二列为工作编号,第3列为职员编号,比如第2行7 8 1就表示在时刻7,将工作8分配给了职员1.
6 2 2
7 8 1
8 5 3
25 3 2
31 10 2
35 15 3