#P13439. [GCJ 2009 #1C] Bribe the Prisoners

    ID: 13249 远端评测题 2000~3000ms 1024MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>动态规划 DP2009区间 DPGoogle Code Jam

[GCJ 2009 #1C] Bribe the Prisoners

Description

在一个王国里,有一些牢房(编号为 11PP),这些牢房排成一条直线。编号为 iii+1i+1 的牢房是相邻的,相邻牢房中的囚犯被称为“邻居”。相邻牢房之间有一堵带窗户的墙,邻居们可以通过窗户进行交流。

所有囚犯本来相安无事,直到有囚犯被释放。当某个囚犯被释放时,他的邻居会得知这个消息,并且每个邻居会把这个消息传递给他的另一个邻居。如此传递下去,直到消息传到没有其他邻居的囚犯(即处在第 11 号牢房、第 PP 号牢房,或其相邻牢房已空的囚犯)。每当某个囚犯得知有其他囚犯被释放时,除非他被贿赂一枚金币,否则他会愤怒地砸坏自己牢房里的所有东西。因此,当释放编号为 AA 的囚犯时,AA 号牢房两侧的所有囚犯——从 AA 向左直到第 11 号牢房、向右直到第 PP 号牢房或遇到空牢房为止——都需要被贿赂。

假设每个牢房最初都正好关押着一名囚犯,并且每天只能释放一个囚犯。给定 QQ 个将要被释放的囚犯(共需 QQ 天),请你计算,如果可以任意选择释放顺序,最少需要多少金币用于贿赂。

注意,每一次贿赂只对当天有效。如果某个囚犯昨天被贿赂了,今天又听说有囚犯被释放,他还需要再次被贿赂。

Input Format

输入的第一行是测试用例数 NN。接下来有 NN 组测试数据。每组数据包含两行。第一行为:

P QP \ Q

其中 PP 是牢房的总数,QQ 是需要释放的囚犯数。

接下来一行包含 QQ 个不同的牢房编号(要被释放的囚犯所在牢房),用空格分隔,按升序排列。

Output Format

对于每组测试数据,输出一行,格式如下:

Case #XX: CC

其中 XX 是测试编号(从 11 开始),CC 是最少需要的金币数。

2
8 1
3
20 3
3 6 14
Case #1: 7
Case #2: 35

Hint

样例说明

在第二个样例中,假如你先释放 14 号牢房的囚犯,再释放 6 号,最后释放 3 号,所需金币数为 19+12+4=3519 + 12 + 4 = 35。如果你先释放 6 号,再释放 3 号,最后释放 14 号,所需金币数为 19+4+13=3619 + 4 + 13 = 36

限制条件

  • 1N1001 \leq N \leq 100
  • QPQ \leq P
  • 每个牢房编号均为 11PP 之间的整数

小数据集

  • 时间限制:2 秒
  • 1P1001 \leq P \leq 100
  • 1Q51 \leq Q \leq 5

大数据集

  • 时间限制:3 秒
  • 1P100001 \leq P \leq 10000
  • 1Q1001 \leq Q \leq 100

翻译由 ChatGPT-4.1 完成。