题目链接: http://poj.org/problem?id=3735
一开始的想法是建立两个(n+1)*(n+1)的矩阵A,对角线均为1,其他元素初始为0,另一个(n+1)*1的矩阵B,对于元素(b i1) ∈ B,1<= i <=n(矩阵元素坐标在讨论中均以1开始),表示第n只猫的花生个数,初始均为0,b(n+1)1=1。
对于g i 操作,将(a i(n+1)) 加1。((aij) ∈ A)
对于e i 操作,将第 i 行全置为零。
对于s i j 操作,将第 i 行和第 j 行交换。
这样,修改后的矩阵A对其求m次幂,再与矩阵B相乘得到一个(n+1)*1的矩阵,第 i 行(1<= i <=n)表示第n只猫最后的花生个数。
对于题目样列,算式如下,
仔细思考,上述矩阵可以简化,重新定义(n+1)*(n+1)的矩阵A,对角线均为1,对于(a i1) ∈ A,1<= i <=n表示第n只猫的花生个数,初始均为0。
对于g i 操作,将(a i 1) 加1。
对于e i 操作,将第 i 行全置为零。
对于s i j 操作,将第 i 行和第 j 行交换。
这个方法与前面的是等价的,对A求m次幂,(a i1) ∈ Am,1<= i <=n表示第n只猫的花生个数。
时间: 2024-10-10 20:11:50