#P2698. Servicing DVD Requests
Servicing DVD Requests
描述
你正在经营一个图书馆。假设你有个驱动器,用户可以通过这些驱动器访问所请求的内容。一个驱动器在同一时间只能访问一张的内容。当收到一个请求时,如果该已经在某个驱动器中,则无需任何操作。否则,你需要将请求的插入一个空的驱动器。如果所有个驱动器都已占用,则必须先从某个驱动器中移除一张,再将请求的插入该驱动器。目标是为整个请求序列提供服务时,最小化所需的插入次数。
为了使问题更有趣,我们假设你已提前获知整个请求序列。此外,你必须按照顺序处理请求,即在处理之前必须先处理,其中。你需要仔细规划如何处理每个请求,以使总插入次数最小。显然,难点在于当收到一个未被任何驱动器缓存的请求且所有驱动器都已占用时,如何确定应该移除哪张。
例如,设,请求序列为。对于前两个请求,只需将 和分别插入两个驱动器。当第三个请求(即)到达时,你必须从驱动器中移除或,以便将插入其中一个驱动器。
- 如果选择第一种方案(即移除),则剩余的请求(即请求)至少需要再进行一次插入。
- 如果选择第二种方案(即移除),则剩余的请求(即请求)无需再进行任何插入。
不难验证,第二种方案是处理上述请求序列的最优方式,仅需三次插入。
输入
第一行包含测试用例的数量。每个测试用例的第一行包含两个数字和,其中是驱动器的数量,是请求的数量。接下来的行中,第行包含第个请求。
输出
对于每个测试用例,你的程序需要在一行中输出处理整个请求序列所需的最小插入次数。
输入数据
2
2 7
1
2
3
1
3
1
3
3 9
1
2
3
4
1
2
1
2
4
输出数据
3
4
来源
台湾 2004