#P1054. The Troublesome Frog
The Troublesome Frog
描述
在韩国,小青蛙 “cheonggaeguri” 的调皮是出了名的。这种名声当之无愧,因为这些青蛙会在夜间跳过你的稻田,把水稻植株压平。早上,在记录下哪些植株被压平后,你想要找出造成最大破坏的青蛙所走过的路径。一只青蛙总是沿着直线跳过稻田,且每一跳的长度相同:
你的稻田里,植株排列在网格的交叉点上,如图 1 所示,调皮的青蛙会完全跳过你的稻田,从稻田的一侧外部开始,到另一侧外部结束,如图 2 所示:
许多青蛙会跳过稻田,从一株水稻跳到另一株水稻。每一跳都会落在一株植株上并把它压平,如图 3 所示。注意,在夜间,有些植株可能会被不止一只青蛙踩到。当然,你看不到显示青蛙路径的线条,也看不到稻田外的跳跃情况。对于图 3 中的情况,你能看到的如图 4 所示:
从图 4 中,你可以重构出青蛙可能在稻田中走过的所有路径。你只对在跳过稻田的过程中至少踩到 3 个水稻植株的青蛙感兴趣。这样的路径被称为青蛙路径。在这种情况下,这意味着图 3 中显示的三条路径是青蛙路径(也存在其他可能的青蛙路径)。沿着第 1 列向下的垂直路径,除了只有 2 株被压平的植株(所以我们不考虑这条路径)之外,它可能是一条跳跃长度为 4 的青蛙路径;而包括第 2 行第 3 列、第 3 行第 4 列和第 6 行第 7 列植株的对角线路径,虽然有 3 株被压平的植株,但不存在一种规则的跳跃长度能以这种方式间隔跳跃且至少踩到 3 株植株,所以它不是青蛙路径。还要注意,沿着青蛙路径的直线上可能存在其他被压平的植株,这些植株不需要是该路径上被踩到的(见图 4 中第 2 行的植株 (2, 6)),实际上有些被压平的植株可能根本无法用任何青蛙路径来解释。
你的任务是编写一个程序,确定在任何一条青蛙路径上被踩到的最大植株数(对所有可能的青蛙路径取最大值)。在图 4 中,答案是 7,是从第 6 行的青蛙路径得到的。
输入
你的程序将从标准输入读取数据。第一行包含两个整数 和 ,分别表示你的稻田的行数和列数,。第二行包含一个整数 ,表示被压平的水稻植株的数量,。其余 行中的每一行包含两个整数,分别是被压平的水稻植株的行号( 行号 )和列号( 列号 ),它们之间用一个空格分隔。每个被压平的植株只会被列出一次。
输出
你的程序将写入标准输出。输出包含一行,一个整数。如果存在至少一条青蛙路径,则该整数是造成最大破坏的青蛙路径上被压平的植株数量;否则,该整数为 0。
6 7
14
2 1
6 6
4 2
2 5
2 6
2 7
3 4
6 1
6 2
2 3
6 3
6 4
6 5
6 7
7
来源
国际信息学奥林匹克竞赛(IOI)2002 年