题目
https://gmoj.net/senior/#main/show/6884
解法1
我用的是非题解做法——
S
L
S
6884
SLS_{6884}
SLS6884差分法。
假设现在有一个填数方案
a
1
,
1
a
1
,
2
a
1
,
3
⋯
a
1
,
n
−
1
a
1
,
n
a
2
,
1
a
2
,
2
a
2
,
3
⋯
a
2
,
n
−
1
a
2
,
n
⋮
⋮
⋮
⋱
⋮
⋮
a
n
−
1
,
1
a
n
−
1
,
2
a
n
−
1
,
3
⋯
a
n
−
1
,
n
−
1
a
n
−
1
,
n
a
n
,
1
a
n
,
2
a
n
,
3
⋯
a
n
,
n
−
1
a
n
,
n
\begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} &\cdots & a_{1,n-1} & a_{1,n}\\ a_{2,1} & a_{2,2} & a_{2,3} &\cdots & a_{2,n-1} & a_{2,n}\\ \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\ a_{n-1,1} & a_{n-1,2} & a_{n-1,3} &\cdots & a_{n-1,n-1} & a_{n-1,n}\\ a_{n,1} & a_{n,2} & a_{n,3} &\cdots & a_{n,n-1} & a_{n,n} \end{matrix}
a1,1a2,1⋮an−1,1an,1a1,2a2,2⋮an−1,2an,2a1,3a2,3⋮an−1,3an,3⋯⋯⋱⋯⋯a1,n−1a2,n−1⋮an−1,n−1an,n−1a1,na2,n⋮an−1,nan,n
由于要求每种路径上的
∑
a
\sum a
∑a不同,而且每一个
a
i
,
j
a_{i,j}
ai,j的大小又有限制,就不妨规定从
a
1
,
1
a_{1,1}
a1,1到
a
1
,
n
a_{1,n}
a1,n再到
a
n
,
n
a_{n,n}
an,n的路径权值最小,为0;而从
a
1
,
1
a_{1,1}
a1,1到
a
n
,
1
a_{n,1}
an,1再到
a
n
,
n
a_{n,n}
an,n的路径权值最大。
这样子势必有图2优于图1。
考虑图2比图1优在哪里。将它们重合后,可以得到图3:
在
(
2
,
1
)
→
(
4
,
3
)
(2,1)\to (4,3)
(2,1)→(4,3)的矩形中,绿色路径更优;但是在
(
4
,
3
)
→
(
6
,
6
)
(4,3)\to (6,6)
(4,3)→(6,6)中,蓝色路径更优,且逆转了绿色路径的优势。
为了方便表示一个矩形内一种路径比另一种路径优的值,我们可以令
b
i
,
j
=
a
i
+
1
,
j
−
a
i
,
j
+
1
b_{i,j}=a_{i+1,j}-a_{i,j+1}
bi,j=ai+1,j−ai,j+1。那么这时
(
2
,
1
)
→
(
4
,
3
)
(2,1)\to (4,3)
(2,1)→(4,3)的矩形中绿色路径的优势就为
b
2
,
1
+
b
3
,
1
+
b
2
,
2
+
b
3
,
2
b_{2,1}+b_{3,1}+b_{2,2}+b_{3,2}
b2,1+b3,1+b2,2+b3,2。
如果右下方的矩形缩小成只有4格(这是最小规格了,只包含一个
b
i
,
j
b_{i,j}
bi,j),左上方的矩形无限扩大,也必须要满足右下方的
b
b
b值大于左上方的
∑
b
\sum b
∑b。
因此可以得出
b
b
b要满足的条件:
b
x
,
y
>
∑
i
=
1
x
−
1
∑
j
=
1
y
−
1
b
i
,
j
b_{x,y}>\sum_{i=1}^{x-1}\sum_{j=1}^{y-1}b_{i,j}
bx,y>i=1∑x−1j=1∑y−1bi,j
那现在就可以开始填
b
b
b了:
- 因为数值要尽可能小,而 b > 0 b>0 b>0,第一行、第一列就全部填1了;
- 第二行也要尽可能小,但是要满足上面的不等式,因此第二行从第二列开始填 2 , 3 , 4 , ⋯ 2,3,4,\cdots 2,3,4,⋯;
- 第三行从第二列开始满足不等式的最小填法是 3 , 6 , 10 , ⋯ 3,6,10,\cdots 3,6,10,⋯;
- ……
那么就可以得出整个矩形
b
b
b了,以
n
=
7
n=7
n=7为例,它长成这样:
1
1
1
1
1
1
1
2
3
4
5
6
1
3
6
10
15
21
1
4
10
20
35
56
1
6
21
56
126
252
\begin{matrix} 1 & 1 & 1 & 1 & 1 & 1\\ 1 & 2 & 3 & 4 & 5 & 6\\ 1 & 3 & 6 & 10 & 15 & 21 \\ 1 & 4 & 10 & 20 & 35 & 56\\ 1 & 6 & 21 & 56 & 126 & 252 \end{matrix}
1111112346136102114102056151535126162156252
发现了什么没有?
天哪!它是个斜着的杨辉三角形,我可以用组合数切掉这道题啦,哈哈哈……
杨辉三角形这个东西在本题没什么用。
这个矩形满足
b
i
,
j
=
b
i
−
1
,
j
+
b
i
,
j
−
1
b_{i,j}=b_{i-1,j}+b_{i,j-1}
bi,j=bi−1,j+bi,j−1,因此直接递推就可以了。
最后再求
a
a
a。
这种写法还有一个好处——不用写高精度减法。
解法2
其实没有必要先求
b
b
b再求
a
a
a,这里介绍一种更为简便的方法——
W
Y
D
6884
WYD_{6884}
WYD6884填数法。
假设现在我们用某种渠道获得了可以跑出
n
=
6
,
n
=
7
n=6,n=7
n=6,n=7的程序(暴力是不行的,但是正解可以),可以打表找规律,发现:
a
i
,
j
=
{
1
,
i
=
1
,
或
2
2
a
i
−
1
,
1
,
j
=
1
a
i
−
1
,
j
+
a
i
,
j
−
1
,
j
+
i
−
n
≤
0
a
i
−
1
,
j
+
a
i
,
j
−
1
−
a
i
+
j
−
n
,
n
−
1
,
j
+
i
−
n
>
0
a_{i,j}=\begin{cases} 1,&i=1,\text{或} 2\\ 2a_{i-1,1},& j=1\\ a_{i-1,j}+a_{i,j-1}, &j+i-n\le 0\\ a_{i-1,j}+a_{i,j-1}-a_{i+j-n,n-1}, &j+i-n> 0 \end{cases}
ai,j=⎩⎪⎪⎪⎨⎪⎪⎪⎧1,2ai−1,1,ai−1,j+ai,j−1,ai−1,j+ai,j−1−ai+j−n,n−1,i=1,或2j=1j+i−n≤0j+i−n>0
这样虽然要写高精度减法,但是由于不用求
b
b
b,也很好打。