问题:给定N个棋子,问N个棋子能围住的最大面积是多少(假设棋盘无限大)
首先我们定义什么是“围住",主要通过以下度规来表示两个点之间是连续的(即对方没有气)
d((x1,y1),(x2,y2))=max{|x1-x2|,|y1-y2|}
“围住”要求对于任意一个点P,必须存在两个相邻的点Q,T,使得d(P,Q)=d(P,T)=1 这样就能保证这N个点收尾相接构成一个封闭的曲线,这也就是从数学上来严格定义什么叫”围住”。
接下来,我们引入一个数学结论:
给定任意一个点P(x,y)其中x,y均为整数, 其与原点连线PO所经过的整点数刚好是GCD(x,y)+1
不失一般性的,假设这N个点中任意两点不同时处于同一条从原点出发的射线上(这样可以避免面积重叠计算)
最后,我们就会得到一个非线性整数规划问题:
max Sum{GCD(x_i,y_i)}, s.t. d(P_i,P_{(i-1)%15})=d(P_i,P_{i(+1)%15})=1 AND {P_i,P_j 不处于同一从原点出发的射线之上,对于任意i,j}
注意到,这个规划的求解可以利用一个单调性的技巧,这来源于我们的距离度规d
不是一般性的,假设有水平连续三点(x-1,y),(x,y),(x+1,y),那么,当我们把中间一点上移一格,发现距离依然不变,说明这三点依然连续,即:
d((x-1,y),(x,y))=d((x+1,y),(x,y))=d((x-1,y),(x,y+1))=d((x+1,y),(x,y+1))=1
然而,面积确增加了一格,因为:
GCD(0,y+1)=GCD(0,y)+1
这种单调性递增不会无限进行,最终会由于出现饱和锯齿形排列而终止,此时面积即为最大面积。