DP之矩阵转移

这篇博客介绍了如何利用矩阵乘法优化DP转移,特别是针对存在循环节的情况。通过斐波那契数列举例说明矩阵乘法在DP中的应用,并详细解析了一个具体的题目——JZOJ5416,讨论了如何构建矩阵并进行填充,从而高效求解问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先扯两句

很多人说如果DP转移有循环节,直接矩乘就好了。但是像我这样这么蒟蒻的选手还是数不胜数的。
但是又有多少人真的懂矩乘?能够熟练掌握?
本人才疏学浅,以下观点只是我的一孔之见,希望大佬们批评指正。

矩阵乘法

这个东西其实不难。
大家都知道,矩阵C=AB=A∗BC=AB=A*BC=AB=AB,其中矩阵AAA,nnnppp列,矩阵BBB,pppmmm列。则矩阵CCCnnnmmm列。
需要注意的地方:
只有A的列数=B的行数,才能够进行矩阵乘法。
原因
矩阵乘法的公式:c[i][j]=∑k=1pa[i][k]∗b[k][j]c[i][j]=\sum_{k=1}^p a[i][k]*b[k][j]c[i][j]=k=1pa[i][k]b[k][j]
在草稿纸上画一下:在这里插入图片描述
在矩阵C的元素(i,j)(i,j)(i,j),是矩阵A和B中对应元素的积(已用相同颜色标示)之和。
总共有p种颜色。能够进行矩阵乘法,当然需要A的列数等于B的行数。

DP转移矩阵最核心的地方

DP的转移如果存在循环节,且涉及的元素不多,则可以考虑用矩乘优化。
现在考虑f[i]f[i]f[i]f[i+1]f[i+1]f[i+1]的转移。现在要解决两件事。①将f[i]f[i]f[i]转移到f[i+1]f[i+1]f[i+1],②f[i]f[i]f[i]的转移式中的其他项该如何更新。
通过矩阵乘法,能够解决上面的两件事。
在这里插入图片描述
方便地,现在要将f[n]f[n]f[n]转移到f[n+1]f[n+1]f[n+1]
f[n]f[n]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值