UVA658 It‘s not a Bug, it‘s a Feature! 题解

题目描述:

补丁在修正BUG时,有时也会引入新的BUG,假定有n(n<=20)n(n<=20) 个潜在BUG,和m(m<=100)m(m<=100) 个补丁,每个补丁用两个长度为nn 的字符串表示,其中字符串的每个位置表示一个bug,第一个串表示打补丁之前的状态(“-”表示该BUG必须不存在,“+”表示该补丁必须存在,0表示无所谓),第二串表示打补丁之后的状态(”-“表示不存在,“+”表示存在,0表示不变)。每个补丁有一定的执行时间,你的任务是用最小的时间把所有BUG都存在的软件变得没有BUG。

解题思路:

我们把bug的"状态"(可以用二进制位来表示,也可以之间用字符串)看成点,状态可以通过"打补丁"变到另一个状态,所以我们可以把"补丁"看成边,那么问题就变成全是"+“的状态变成全是”-“的最短路径问题,不过还存在几点问题。首先"状态"太多了,有 2 20 2^{20}

你可能感兴趣的:(算法竞赛入门经典,最短路径,图论,acm竞赛,算法)