递推的四种写法

题目链接

从 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\) ……

写一下转移

\[f_n=f_{n-1}+g_{n-1} \]

\[g_n=2f_{n-1}+g_{n-1}+2h_{n-1} \]

\[h_n=g_{n-1}+h_{n-1} \]

综上是 \(40\%\)\(O(n)\) 递推,如果从这里开始 矩乘 ,写的好的话或许也可以有 \(70\%\) ~ \(100\%\) ,如果写的不够漂亮可能会掉到 \(10\%\)

化简一下式子,不妨从 \(h_n\) 开始。

\[h_n=g_{n-1}+h_{n-1} \]

展开 \(h_{n-1}\)

\[h_n=g_{n-1}+g_{n-2}+h_{n-2} \]

\[=g_{n-1}+g_{n-2}+g_{n-3}+h_{n-3} \]

\(sg_n\) 表示 \(g_n\) 的前 \(n\) 项和,即 \(\sum_{i=1}^ng_i\) ,则

\[h_n=sg_{n-1} \]

于是把 \(h\) 消掉了,同理可得

\[f_n=sg_{n-1}+4 \]

\(h_n\) 不同是因为初始值不同。

那么全部代入 \(g_n\) 里面。

\[g_n=2f_{n-1}+g_{n-1}+2h_{n-1} \]

\[=2sg_{n-2}+8+g_{n-1}+2sg_{n-2} \]

\[g_n-g_{n-1}=4sg_{n-2}+8 \]

化简这个是高考数学玩烂的把戏了,如下:

\[g_n-g_{n-1}=4sg_{n-2}+8 \]

\[g_{n-1}-g_{n-2}=4sg_{n-3}+8 \]

上式减去下式,得

\[g_n-2g_{n-1}+g_{n-2}=4g_{n-2} \]

\[g_n=2g_{n-1}+3g_{n-2} \]

斐波那契数列怎么算的,这个就怎么算。

算上 \(sg_n\) 的话(因为要算 \(f_n\) ),这是一个 \(3\times3\) 的矩阵,拿来做 \(70\%\) 再好不过了。

接下来可以运用科技继续化简:

列出特征方程

\[x^2=2x+3 \]

解得

\[x_1=3,x_2=-1 \]

那么可以设

\[g_n=a\times3^n+b\times(-1)^n \]

代入 \(g_1=0,g_2=8\) ,解二元一次方程得 \(a=\dfrac23,b=2\),即

\[g_n=2\times3^{n-1}+2\times(-1)^n \]

由等比数列求和公式,计算 \(sg_n\)

\[sg_n=3^{n}+(-1)^n-2 \]

那么

\[f_n=sg_{n-1}+4 \]

\[=3^{n-1}+(-1)^{n-1}+2 \]

\(n\) 的答案为 \(f_n+g_n\) ,即

\[f_n+g_n=3^n+(-1)^n+2 \]

费马小定理 ,把 \(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

posted @ 2022-06-02 19:54  Sherlockk  阅读(149)  评论(0)    收藏  举报