自己写:让前面的人挪个位
五个人、四台机器。每个人只会开其中几台,一台机器同时只能一个人用,一个人也只能占一台:补全 aug 那两步。关键在"或者"后面半句——占着这台机器的人,能不能自己再挪到别处去。 PEOPLE = ['阿岚'
⚠️ 用最大流再算一遍匹配数
五个人、四台机器。每个人只会开其中几台,一台机器同时只能一个人用,一个人也只能占一台:把匹配改写成一张管道网:总源 S 到每个人容量 1,人到他会开的机器容量 1,机器到总汇 T 容量 1。两种算法各算一次,输出两个数对账。 PEOPLE
🔴 只把两个人对调,贪心就"对"了
五个人、四台机器。每个人只会开其中几台,一台机器同时只能一个人用,一个人也只能占一台:还是那个先到先得,只把名单里阿泰和南风的位置对调一下,其它一个字不改。两次各配出几对? PEOPLE = ['阿岚', '小满&#
「谁必须在谁前面」该用哪一个
一堆任务,只知道两两之间的先后要求,要排出一个能照着做的顺序。该用的是【0】。
⚠️ 「互相到得了的抱成一团」该用哪一个
一张有向图,要把"顺着箭头能互相走到"的点归成一组一组。该用的是【0】。
四个问题,各该用哪一个
四个问题依次是:一人一台、互相可达、最多过多少水、排出先后。按这个顺序输出各自该用的办法: G = [(0, 1), (0, 2), (1, 3), (2, 3), (3, 4), (4, 5), (5, 3), (4, 6)] def
⚠️ 拓扑排序一共做了多少次减法
七个构建任务编号 0~6,(a, b) 表示 a 做完才能做 b:数一数 kahn 里"入度减 1"这个动作在两张图上各做了多少次——左边是那张 DAG,右边是加了 5 → 3 的那张: DEP = [(0, 1), (
⚠️ 聪明办法和笨办法差多少
七个构建任务编号 0~6,(a, b) 表示 a 做完才能做 b:左边是拓扑排序数出来的减法次数。右边数一数笨办法要做多少次检查:把七个任务的全部排列都试一遍,每个排列逐条验七条依赖。
点数翻一倍,代价翻几倍
点数从 7 涨到 14,边数也跟着差不多翻倍。算一算拓扑排序在两种规模下各做多少次减法。
自己写:从一句人话里认出算法
把选型写成一个函数:从需求描述里找关键词,认出该用哪一类算法。认不出来就老实说再问一遍。