递推的四种写法
从 MO 搬来的题,难度大概是提高组中的简单题,目的是引进一些基础数学知识。
前置知识:线性递推及各种优化:矩阵加速递推,快速幂,特征方程(高考数学范畴)。
建议先完成:P1902。
题解
环不好处理的地方在于填 \(n\) 时要同时考虑 \(1\) 和 \(n-1\) 。因此先把连接 \(1\) 与 \(n\) 的绳结断开,填好链后再考虑 \(1\) 与 \(n\) 并接成环。
设 \(f_n\),\(g_n\),\(h_n\) 分别表示 \(1\) 号与 \(n\) 号豌豆两个性状都相同,一个性状相同,两个性状都不同的方案数,且保证了链是合法的。则 \(n\) 的答案即为 \(f_n+g_n\) 。
列一下初始值(这是一个可能显示不出来的表格):
| \(n\) | \(1\) | \(2\) | \(3\) | …… |
|---|---|---|---|---|
| \(f_n\) | \(4\) | \(4\) | \(12\) | …… |
| \(g_n\) | \(0\) | \(8\) | \(16\) | …… |
| \(h_n\) | \(0\) | \(0\) | \(8\) | …… |
写一下转移
综上是 \(40\%\) 的 \(O(n)\) 递推,如果从这里开始 矩乘 ,写的好的话或许也可以有 \(70\%\) ~ \(100\%\) ,如果写的不够漂亮可能会掉到 \(10\%\)。
化简一下式子,不妨从 \(h_n\) 开始。
展开 \(h_{n-1}\),
设 \(sg_n\) 表示 \(g_n\) 的前 \(n\) 项和,即 \(\sum_{i=1}^ng_i\) ,则
于是把 \(h\) 消掉了,同理可得
和 \(h_n\) 不同是因为初始值不同。
那么全部代入 \(g_n\) 里面。
即
化简这个是高考数学玩烂的把戏了,如下:
上式减去下式,得
即
斐波那契数列怎么算的,这个就怎么算。
算上 \(sg_n\) 的话(因为要算 \(f_n\) ),这是一个 \(3\times3\) 的矩阵,拿来做 \(70\%\) 再好不过了。
接下来可以运用科技继续化简:
列出特征方程
解得
那么可以设
代入 \(g_1=0,g_2=8\) ,解二元一次方程得 \(a=\dfrac23,b=2\),即
由等比数列求和公式,计算 \(sg_n\)
那么
\(n\) 的答案为 \(f_n+g_n\) ,即
由 费马小定理 ,把 \(n\) 读入的时候直接模 \(P-1\) ,再快速幂就好了。瓶颈在于大量读入,建议用 getchar()。
以上是严格的数学推导,下面是考场的一般做法:
Step 1: 写出暴力搜索,把 n=1~10 的答案跑出来,发现是 4,12,28,84,244……。
Step 2: 观察发现后面和 \(3^n\) 很接近,于是往这方面考虑,得出奇数是 \(3^n+1\),偶数是 \(3^n+3\)。那么就得到答案了。
这个叫“打表”,是正经做法。
留一道思考题:
\(n\) 元环,\(k\) 染色,相邻点不同色的方案数。答案表示成等比数列形式。
来自 P3307。

浙公网安备 33010602011771号