QOJ.ac

QOJ

Limite de temps : 10 s Limite de mémoire : 1024 MB Points totaux : 31

#6003. 自由形式工厂

Statistiques

你刚刚建立了一座全新的工厂。你的工厂有 $N$ 台不同的机器,每台机器都需要恰好一名工人来操作,工厂才能正常运转。

你还雇佣了 $N$ 名工人来操作这些机器。由于雇佣时比较匆忙,你没有检查他们是否真的知道如何操作你的机器。现在你终于询问了他们,因此你掌握了每名工人 $i$ 是否知道如何操作每台机器 $j$ 的信息。

在典型的工作日中,工人们会以随机的顺序到达工厂,每天的顺序可能不同。当每名工人到达时,他们会找到所有他们知道如何操作且尚未被分配操作员的机器。他们会随机选择其中一台,并在整个工作日内操作它。如果他们知道如何操作的所有机器都已经有了操作员,他们当天就不会工作。你的目标是确保每天所有机器都有人操作,无论工人们以什么顺序到达,也无论他们选择哪台机器。

例如,假设有两名工人 A 和 B,以及两台机器 1 和 2。假设 A 知道如何操作 1 和 2,而 B 知道如何操作 1 但不知道如何操作 2。如果工人 B 先到达,他会选择机器 1,然后当工人 A 到达时,她必须选择 2,工厂将正常运转。然而,如果工人 A 先到达,可能会发生她选择操作 1 的情况,那么当工人 B 到达时,他将无事可做,导致机器 2 没有操作员,从而使你的工厂浪费一整天!

再举一个例子,假设有两名工人 A 和 B,以及两台机器 1 和 2,且 A 知道如何操作 1 但不知道如何操作 2,而 B 什么都不会。那么,无论工人们以什么顺序到达,工厂都无法正常运转。

在工厂开业之前,为了保证工厂能持续正常运转,你可以教工人们如何操作机器。教一名工人学习操作一台机器需要花费一美元。每节课只涉及一名工人和一台机器,但你可以教任意数量的课程给任意数量的工人,同一名工人也可以接受多节课程。如果工人已经知道如何操作某台机器,你不能让他们忘记。

例如,上述两个例子都可以通过教工人 B 操作机器 2 来解决。在这种情况下,无论工人们以什么顺序到达,也无论他们在有多种选择时选择操作哪台机器,每台机器都能保证每天有操作员。

你需要花费的最少美元数是多少,才能确保工厂每天都能正常运转?

输入格式

输入的第一行给出测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含一个整数 $N$,即工人(和机器)的数量。接下来是 $N$ 行,每行包含一个长度为 $N$ 的字符串。如果第 $i$ 行的第 $j$ 个字符为 $1$,则表示第 $i$ 名工人知道如何操作第 $j$ 台机器,否则为 $0$。

输出格式

对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是一个非负整数:为了确保所有 $N$ 台机器始终有操作员,你需要花费的最少美元数。

数据范围

时间限制:每个测试集 20 秒。 内存限制:1 GB。 $1 \le T \le 100$。

小数据集(测试集 1 - 可见)

$1 \le N \le 4$。

大数据集(测试集 2 - 隐藏)

$1 \le N \le 25$。

样例

样例输入 1

5
2
11
10
2
10
00
3
000
000
000
1
1
3
000
110
000

样例输出 1

Case #1: 1
Case #2: 1
Case #3: 3
Case #4: 0
Case #5: 3

说明

样例 #1 和 #2 是题目描述中提到的例子。

在样例 #3 中,没有人知道如何操作任何机器!一种最优策略是教工人 A 操作机器 1,教工人 B 操作机器 2,教工人 C 操作机器 3。

在样例 #4 中,不需要采取任何行动。只有一名工人,且该工人已经知道如何操作那台机器。

在样例 #5 中,工人 B 已经知道如何操作机器 1 和 2。一种最优策略是教工人 A 操作机器 3,并使 A 成为唯一能操作该机器的工人。但现在我们必须考虑到 B 到达时可能会操作机器 1 或 2,因此 C 需要能够操作 B 未选择的那台机器。所以必须教 C 同时操作 1 和 2。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.