某企业准备将四个工人甲、乙、丙、丁分配在 A、B、C、D 四个岗位。每个工人由于技术水平不同,在不同岗位上每天完成任务所需的工时见下表。适当安排岗位,可使四个工人以最短的总工时(14)全部完成每天的任务。

指派问题是一类典型的一对一匹配优化问题,属于特殊的0-1整数规划,常用于人员岗位分配、设备任务调度等场景,核心是将n个任务或岗位分配给n个执行者或设备,实现总成本最小化或总收益最大化。这类问题常用匈牙利算法求解,核心逻辑是通过矩阵归约简化问题:先对矩阵每行减去该行最小值完成行归约,再对每列减去该列最小值完成列归约,将原矩阵转化为含多个零元素的简化矩阵,接着寻找分属不同行不同列的独立零元素,若能找到n个,这些零对应的原矩阵数值之和就是最优分配的总成本;若无法找到足够的独立零,需绘制最少数量的直线覆盖所有零元素,用未被覆盖区域的最小元素调整矩阵后,重复上述步骤直到找到最优匹配。针对最大化指派问题,还可通过用矩阵中的最大元素减去所有元素,将其转化为最小化问题后再用匈牙利算法求解。
本题考察的是指派问题(Assignment Problem)中的匈牙利算法或最优化分配方法。
题目的目标是让四位工人分别安排到不同的岗位,使得总工时最小,这属于典型的最小化成本的指派问题。我们可以用穷举或匈牙利算法来求解。

第一步:行最小值减法(行归约)
对每一行,减去该行的最小值。
甲:7 5 2 3 → 最小值2 → 5 3 0 1
乙:9 4 3 7 → 最小值3 → 6 1 0 4
丙:5 4 7 5 → 最小值4 → 1 0 3 1
丁:4 6 5 6 → 最小值4 → 0 2 1 2

第二步:列最小值减法(列归约)
对每一列,减去该列的最小值。
A列:5 6 1 0 → 最小值0
B列:3 1 0 2 → 最小值0
C列:0 0 3 1 → 最小值0
D列:1 4 1 2 → 最小值1
所以仅D列需要减1:
D列变为:0 3 0 1

第三步:找出独立的0
找出 独立的0,即不同行不同列中的0。尝试找最大匹配(我们需要找到4个0,覆盖所有行):

从原始矩阵中取对应工时:甲 → D = 3,乙 → C = 3, 丙 → B = 4,丁 → A = 4
总工时 = 3 + 3 + 4 + 4 = 14。
