gmoj 6884. 【2020.11.23提高组模拟】径(path)

题目

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,1an1,1an,1a1,2a2,2an1,2an,2a1,3a2,3an1,3an,3a1,n1a2,n1an1,n1an,n1a1,na2,nan1,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。
图1和图2

考虑图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,jai,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=1x1j=1y1bi,j
那现在就可以开始填 b b b了:

  1. 因为数值要尽可能小,而 b > 0 b>0 b>0,第一行、第一列就全部填1了;
  2. 第二行也要尽可能小,但是要满足上面的不等式,因此第二行从第二列开始填 2 , 3 , 4 , ⋯ 2,3,4,\cdots 2,3,4,
  3. 第三行从第二列开始满足不等式的最小填法是 3 , 6 , 10 , ⋯ 3,6,10,\cdots 3,6,10,
  4. ……

那么就可以得出整个矩形 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=bi1,j+bi,j1,因此直接递推就可以了。
最后再求 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,2ai1,1,ai1,j+ai,j1,ai1,j+ai,j1ai+jn,n1,i=1,2j=1j+in0j+in>0
这样虽然要写高精度减法,但是由于不用求 b b b,也很好打。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值