DP之矩阵转移

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

先扯两句

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

矩阵乘法

这个东西其实不难。
大家都知道,矩阵 C = A B = A ∗ B C=AB=A*B C=AB=AB,其中矩阵 A A A, n n n p p p列,矩阵 B B B, p p p m m m列。则矩阵 C C C n n n m m m列。
需要注意的地方:
只有A的列数=B的行数,才能够进行矩阵乘法。
原因
矩阵乘法的公式: c [ i ] [ j ] = ∑ k = 1 p a [ 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]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值