题意:
      给以个递推f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n - 3) + ... + ad f(n - d), for n > d.,给你n,d,a1,a2..ad ,f[1],f[2]..f[d],让你求f[n]%m.

思路:
      比较基础的矩阵题目,每次都构造一个d*d的矩阵,然后用快速幂求出来它的n-1次幂,然后在求出乘积就行了,简单构造,没有什么坑点。

#include<stdio.h>
#include<string.h>

typedef struct
{
   long long Mat[16][16];
}MAT;

long long n ,MOD ,d;

MAT mm(MAT a ,MAT b)
{
   MAT c;
   memset(c.Mat ,0 ,sizeof(c.Mat));
   for(int i = 1 ;i <= d ;i ++)
   for(int j = 1 ;j <= d ;j ++)
   for(int k = 1 ;k <= d ;k ++)
   c.Mat[i][j] = (c.Mat[i][j] + a.Mat[i][k] * b.Mat[k][j])%MOD;
   return c;
}

MAT Quick(MAT a ,long long b)
{
   MAT c;
   memset(c.Mat ,0 ,sizeof(c.Mat));
   for(int i = 1 ;i <= d ;i ++)
   c.Mat[i][i] = 1;
   while(b)
   {
      if(b&1) c = mm(c ,a);
      a = mm(a ,a);
      b>>=1;
   }
   return c;
}

int main ()
{
   long long D[16] ,F[16] ,i;
   MAT A;
   while(~scanf("%lld %lld %lld" ,&d ,&n ,&MOD) && d + n + MOD)
   {
      for(i = 1 ;i <= d ;i ++) 
      {
         scanf("%lld" ,&D[i]);
         D[i] %= MOD;
      }
      for(i = 1 ;i <= d ;i ++) 
      {
         scanf("%lld" ,&F[i]);
         F[i] %= MOD;
      }
      if(n <= d)
      {
         printf("%lld\n" ,F[n]);
         continue;
      }
      memset(A.Mat ,0 ,sizeof(A.Mat));
      int x = 2 ,y = 1;
      for(i = 2 ;i <= d ;i ++)
      {
         A.Mat[x][y] = 1;
         x ++ ,y ++;
      }
      for(i = 1 ;i <= d ;i ++)
      A.Mat[i][d] = D[d-i+1];
      
      
      A = Quick(A ,n - 1);
      long long Ans = 0;
      for(i = 1 ;i <= d ;i ++)
      {
         Ans += F[i] * A.Mat[i][1];
         Ans %= MOD;
      }
      printf("%lld\n" ,Ans);
   }
   return 0;
}

UVA10870递推关系(矩阵乘法)相关推荐

  1. 十个利用矩阵乘法解决的经典题目

    出自matrix67.com 好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质.     不要以为数学 ...

  2. 矩阵乘法递推的优化艺术

    对于一个线性递推式,求它第项的值,通常的做法是先构造一个的矩阵,然后在时间内求出. 其实,由于这个矩阵的特殊性,可以将时间优化到.接下来我会以一个题目来讲解矩阵乘法递推的优化. 题目:http://w ...

  3. 【转载】ACM中矩阵乘法的应用

    copied from  大神's blog 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符.在数学中,一个矩阵说穿了就是一个二维数组.一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是 ...

  4. 矩阵之矩阵乘法(转载)

    参考Matrix67:http://www.matrix67.com/blog/archives/276 十个利用矩阵乘法解决的经典题目 好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的 ...

  5. 【ALGO】矩阵乘法

    文章导航 kkk阶常数系线性递推关系 乘法规则 例题 ACW 1303. Fibonacci前nnn项和 题面 解析 AC代码 ACW 1304. 佳佳的Fibonacci 题面 解析 AC代码 HN ...

  6. 如何在CPU上优化GEMM矩阵乘法

    如何在CPU上优化GEMM矩阵乘法 How to optimize GEMM on CPU (TL;DR) TVM 提供抽象接口,允许用户分别描述算法和算法的实现组织(所谓的调度).通常,在高性能调度 ...

  7. CPU的自动调度矩阵乘法

    CPU的自动调度矩阵乘法 这是一个有关如何对CPU使用自动调度程序的文档. 与依靠手动模板定义搜索空间的基于模板的autotvm不同,自动调度程序不需要任何模板.用户只需要编写计算声明,而无需任何调度 ...

  8. [学习笔记]矩阵乘法及其优化dp

    1.定义: $c[i][j]=\sum a[i][k]\times b[k][j]$ 所以矩阵乘法有条件,(n*m)*(m*p)=n*p 即第一个矩阵的列数等于第二个矩阵的行数,否则没有意义. 2.结 ...

  9. ICML 2021:矩阵乘法无需相乘,速度提升100倍,MIT开源最新近似算法

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 在不做乘 ...

  10. 大佬是怎么优雅实现矩阵乘法的?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨立交桥跳水冠军 来源丨https://zhuanlan.zhi ...

最新文章

  1. Android 取得 ListView中每个Item项目的值
  2. 2015 HIAST Collegiate Programming Contest J
  3. Java中基本数据类型和Object之间的关系
  4. 第一篇博客——用来写自己
  5. Linux是否兼容windows跨区卷,简单卷与跨区卷的区别介绍
  6. react 使用 mobx_如何使用React和MobX状态树构建基于状态的路由器
  7. 开发个好的RTMP播放器到底难在哪里?RTMP播放器对标和考察指标
  8. redis无序集合set类型详解
  9. 华为P50 Pro最新渲染图曝光:后置造型有点奇怪
  10. css的长度单位没有哪些,css 长度单位知多少
  11. 找出数组中只出现1次的两个元素
  12. java8 gc配置_基于JDK8的JVM参数设置和GC日志解读
  13. 新手必看:揭秘德州扑克概率表
  14. flow control
  15. 1688API item_search_img - 拍立淘搜索淘宝商品
  16. XTUOJ-1281-Cute String
  17. Remix-IDE(一)
  18. 4K60帧!RayLink远程控制软件如何帮助设计师远程办公?
  19. cadence 批量一次性修改title 页码标题等
  20. php安全新闻早八点-Microdoor-第三季

热门文章

  1. JAX-RS 方式的 RESTful Web Service 开发
  2. AndroidStudio 生成Jar并混淆
  3. Spark ThriftServer使用的大坑
  4. 后盾网lavarel视频项目---lavarel用户认证实例
  5. MySQL 时间类型 DATE、DATETIME和TIMESTAMP
  6. asp.net如何读取Excel文件
  7. css布局详解(一)——盒模型
  8. SQL Server 事务隔离级别的解析
  9. 通过微软的cors类库,让ASP.NET Web API 支持 CORS
  10. AppController