#334. 软件补丁问题
软件补丁问题
题目描述
T 公司
发现其研制的一个软件中有 个错误,随即为该软件发放了一批共 个补丁程 序。每一个补丁程序都有其特定的适用环境,某个补丁只有在软件中包含某些错误而同时又 不包含另一些错误时才可以使用。一个补丁在排除某些错误的同时,往往会加入另一些错误。 换句话说,对于每一个补丁,都有 个与之相应的错误集合和,使得仅当软件 包含中的所有错误,而不包含中的任何错误时,才可以使用补丁。补丁 将修复 软件中的某些错误,而同时加入另一些错误。另外,每个补丁都耗费一定的时间。 试设计一个算法,利用T 公司
提供的个补丁程序将原软件修复成一个没有错误的软件,并使修复后的软件耗时最少。
编程任务: 对于给定的个错误和个补丁程序,找到总耗时最少的软件修复方案。
输入格式
第 行有 个正整数 和, 表示错误总数, 表示补丁总数,。接下来行给出了个补丁的信息。每行包括一 个正整数,表示运行补丁程序 所需时间,以及 个长度为的字符串,中间用一个空格符 隔开。第 个字符串中,如果第个字符bk为“+”
,则表示第个错误属于,若为“-”
, 则表示第k个错误属于,若为“0”
,则第k个错误既不属于也不属于,即 软件中是否包含第个错误并不影响补丁的可用性。第 个字符串中,如果第k个字符bk 为“-”
,则表示第个错误属于,若为“+”
,则表示第个错误属于,若为“0”
, 则第k个错误既不属于也不属于,即软件中是否包含第个错误不会因使用补丁 而改变。
输出格式
程序运行结束时,将总耗时数输出。如果问题无解,则输出。
样例
输入样例
3 3
1 000 00-
1 00- 0-+
2 0-- -++
输出样例
8