zoukankan      html  css  js  c++  java
  • 矩阵 总结

    前言

    矩阵是一种较为基础的数学工具,OI里面好像不常考?,反正学完数学一本通里的矩阵,做一些矩阵的应用感觉就应该可以了。行列式也是很有趣的东西,我花时间钻研了一下。下面归纳总结一下我做过的一些矩阵的题型

    如果定义这种不会请百度吧 -> 百度矩阵

    矩阵乘法

    矩阵里面最主要的一种。下面是矩阵乘法的一些题。

    • 矩阵快速幂

    P3390模板题 基础。

    • 矩阵加速递推数列

    P1939模板题 加速加法递推直接设状态转移矩阵就好了。

    石头游戏 其实想清楚了石头要从一个格子转移到另一个格子,就可联想到用矩阵来表示格子与格子间的的转移。码量有点大。

    Codeforces 1182E Product Oriented Recurrence 加速乘法递推数列。这类题首先要把c和f拆开来分别处理。转换一下思维,令 (f_i=f_1^p*f_2^q*f_3^r),这时候我们就可以对 p,q,r 进行矩阵加速数列处理(找出 p,q,r 转移的规律)。同样的方法令第x项的c的次数为(k_x),有 (k_x=k_{x-1}+k_{x-2}+k_{x-3}+2*x-6)总结:乘法递推序列这类题就把递推放到指数上来Talk is cheap.Show me the code.

    Codeforces 1117D Magic Gems 自己写出来一个dp方程,发现这个方程可以用矩阵加速,OK。Talk is cheap.Show me the code.

    • 其他矩阵乘法

    Codeforces 1252K Addition Robot 把线段树上的点看成矩阵,就可以表示这些运算(突然发现矩阵乘法还可以这样用),线段树维护区间乘。修改就是‘A’,‘B’互换,所以我们每个点保存两个矩阵,比如我们保存一个该区间当前矩阵‘ABBB’,再保存一个可能会翻转成为的矩阵‘BAAA’(字母对应矩阵,点保存矩阵乘积),修改就交换一下好了。

    更多请关注 -> 矩阵刷题题单

    总结一下几种题型以及方法:

    1.给出加法递推数列,求第n项((n<=10^{18}))做法:根据题目写转移矩阵,可能会有一些小技巧,要自己想。

    2.给出乘法递推数列,求第n项。做法:看一下 (f_i) 可否写成 (a^p+b^q+...+c^r)的形式,考虑 (p,q,r) 可以用加法递推(矩阵加速)求得。好吧,我这做过一个题

    3.给出一个模拟,求n秒后的状态((n<=10^{9})) 做法:看一下状态转移能不能用矩阵乘法表示出来,如果能就想办法矩阵加速一下。

    4.给出一个dp,求dp[n],((n<=10^{9})) 做法:把dp写出来,看一下能不能用矩阵乘法表示转移,如果能就想办法用矩阵加速一下。

    5.给出一些加减乘除,做一些七七八八的东西。(雾 做法:看一下加减乘除符不符合矩阵乘法,如果符合就往矩阵上去想,看一下能不能矩阵乘法套出来(大雾

    高斯消元

    这篇blog写得不错哦,我就是看这篇看懂的qwq

    求n元1次方程组的解,时间复杂度 (O(n^3)),下面给出一些题目。

    • 普通消元

    高斯消元 一般步骤:对每一列的主元以下的元素消元,使得最后只剩下一个上三角矩阵,对上三角矩阵进行回代,解出方程组。每一次选主元要选最大的这个元素。

    高斯-约旦消元 一般步骤:把矩阵消成一个对角矩阵,对角矩阵上有系数,最后输出答案是要消去系数

    线性方程组:用高斯约旦消元,最后n个方程形如 (k_i*x_i=b_i),先判无解:如果 (k_i=0,b_i≠0) 则无解;再判无数解:如果 (k_i=0,b_i=0) 则无数解。注意判 (==0) 时最好和 eps 比较,判断 (fabs(a)<eps),避免精度问题。

    [HNOI2013]游走 列出dp来,发现dp没有先后顺序,可以用高斯消元搞一下啦。

    • 其他特殊消元

    [LnOI2019]加特林轮盘赌 列出dp来,发现dp没有先后顺序,可以用高斯消元搞一下啦。 发现数据范围不太对,(n<=10^4)。发现可以手动消元,手动消元 (O(n^2))(没有跑满)就好了。Talk is cheap.Show me the code.

    总结一下几种题型以及方法

    1.给你一个线性方程组,让你判断解,无解,无数解的情况。做法:可以使用高斯约旦消元,无解就是 (k_i=0,b_i≠0) ,无数解就是 (k_i=0,b_i=0)

    2.给你一个问题,求一些东西,且这个问题可以列出线性方程组来。做法:想办法列出线性方程组,对这个线性方程组求解

    3.给你一个dp题,dp的转移这里发现没有先后顺序。 做法:一般这种题都可以列出n个n元1次方程组,求解即可得到dp值。常见的题有图上的概率dp

    4.给你一个dp题,dp的转移没有先后顺序,(n>1000) 做法:和上一种一样,只不过可能要考虑一下手动消元

    矩阵树

  • 相关阅读:
    HTML初识
    使用python操作Memcache、Redis、RabbitMQ、
    使用salt-cloud创建虚拟机
    运维堡垒机----Gateone
    ELK日志分析系统
    Python MySQL API
    浅谈Java中static作用--转
    oracle如何设置最大连接数
    转--oracle查看允许的最大连接数和当前连接数等信息
    oracle 查看未关闭连接
  • 原文地址:https://www.cnblogs.com/BaseAI/p/11952813.html
Copyright © 2011-2022 走看看