【矩阵乘法】JZOJ_4787 数格子
题意
求出用 2 × 1 2\times 1 2×1的牌填满 4 × N 4\times N 4×N的矩形方案数% M M M。
思路
可以打表,得出 1 , 5 , 11 , 36 , 95 1,5,11,36,95 1,5,11,36,95,之后代入 O E I S OEIS OEIS,得出递推公式(逃
a ( n ) = a ( n − 1 ) + 5 ∗ a ( n − 2 ) + a ( n − 3 ) − a ( n − 4 ) a(n) = a(n-1) + 5*a(n-2) + a(n-3) - a(n-4) a(n)=a(n−1)+5∗a(n−2)+a(n−3)−a(n−4)
矩阵乘法加速递推即可。
代码
#include<cstdio>
#include<cstring>int n, m;
struct matrix{int a[5][5];
};matrix operator *(matrix &a, matrix &b){matrix c;memset(c.a, 0, sizeof(c.a));for (int i = 1; i <= 4; i++)for (int j = 1; j <= 4; j++)for (int k = 1; k <= 4; k++)c.a[i][j] = (c.a[i][j] + (long long)a.a[i][k] * b.a[k][j]) % m;return c;
}void power(int b) {matrix A;memset(A.a, 0, sizeof(A.a));A.a[1][4] = -1;A.a[2][1] = 1;A.a[2][4] = 1;A.a[3][2] = 1;A.a[3][4] = 5;A.a[4][3] = 1;A.a[4][4] = 1;matrix r;r.a[1][1] = 1;r.a[1][2] = 5;r.a[1][3] = 11;r.a[1][4] = 36;for (; b; b >>= 1) {if (b & 1) r = r * A;A = A * A;}printf("%d\n", r.a[1][4]);
}int main() {while (scanf("%d %d", &n, &m), n || m) {if (n == 1) printf("1\n");else if (n == 2) printf("5\n");else if (n == 3) printf("11\n");else if (n == 4) printf("36\n");else if (n == 5) printf("95\n");else power(n - 4);}
}
【矩阵乘法】JZOJ_4787 数格子相关推荐
- 【JZOJ4787】数格子【矩阵乘法】
题目大意: 题目链接:https://jzoj.net/senior/#main/show/4787 求用 1 × 2 1\times 2 1×2的骨牌铺满 4 × n 4\times n 4×n的方 ...
- jzoj4787-[NOIP2016提高A组模拟9.17]数格子【矩阵乘法】
正题 题目大意 求 1 × 2 1\times 2 1×2的方块铺满 4 × n 4\times n 4×n的方格方案总数. 解题思路 首先 当计算 f n f_n fn时, 显然最后一排可以 ( ...
- [jzoj 4787] 数格子 {矩阵乘法}
题目 解题思路 一开始用状态压缩做,只有60分,后来改成了矩阵乘法. 但是这个规律很难找到,不过也因此学会了一种新的方法. 即: f [ i ] = f [ i − 1 ] ∗ 1 + f [ i − ...
- 【BZOJ 3326】[Scoi2013]数数 数位dp+矩阵乘法优化
挺好的数位dp-- 先说一下我个人的做法: 经过观察,发现这题按照以往的思路从后往前递增,不怎么好推,然后我就大胆猜想,从前往后推,发现很好推啊,维护四个变量,从开始位置到现在有了i个数 f[i]:所 ...
- 矩阵(Matrix)实现数乘、矩阵加法、矩阵乘法以及行列式的计算。
[问题描述] 矩阵是线性代数中的重要概念,应用领域非常广泛,在C/C++中,通常将矩阵定义为一个二维数组.本问题中,将输入两个矩阵 A 和 B,实现对矩阵的数乘.矩阵加法.矩阵乘法以及行列式的计算.如 ...
- 【poj3734】矩阵乘法求解
[题意] 给N个方块排成一列.现在要用红.蓝.绿.黄四种颜色的油漆给这些方块染色.求染成红色方块和染成绿色方块的个数同时为偶数的染色方案的个数,输出对10007取余后的答案.(1<=n<= ...
- P5004-专心OI - 跳房子【dp,矩阵乘法】
正题 题目链接:https://www.luogu.org/problemnew/show/P5004 题目大意 把NNN个无色格子排成一行,可以把某些格子染成黑色,但两个黑色格子之间必须至少有MMM ...
- jzoj5223-B【矩阵乘法】
正题 题目大意 3∗33*33∗3的矩阵上每个格子都有机器人,每次可以向相邻格子移动或不动(一个格子上可以有多个机器人),求移动nnn次后每个格子上都有机器人的移动方案数. 解题思路 用矩阵乘法计算出 ...
- 【2019牛客暑期多校训练营(第二场)- E】MAZE(线段树优化dp,dp转矩阵乘法,线段树维护矩阵乘法)
题干: 链接:https://ac.nowcoder.com/acm/contest/882/E?&headNav=acm 来源:牛客网 Given a maze with N rows an ...
最新文章
- 如何将深度学习研究论文实现为代码的几个要点
- 对于一些手机内存概念的思考、深入理解java的finalize,对于内存优化的小总结...
- Sklearn-train_test_split随机划分训练集和测试集
- AtCoder Beginner Contest 174 总结
- java web源代码_检测Java Web应用程序而无需修改其源代码
- 设置View单个圆角
- 数字的可视化:python画图之散点图sactter函数详解
- 《云计算架构技术与实践》连载(12)2.2.7 应用管理自己主动化技术
- html5中control,HTML5.(control-shift)
- 2019年第四次课程设计实验报告
- linux java 多线程_Java多线程:Linux多路复用,Java NIO与Netty简述
- 【PX4学习笔记】3. PX4 固件烧写(1 探索过程)
- 一分钟内搞定!熊猫杀毒软件研发提升扫描速度的技术
- 关于物联网远程控制技术,你了解的有多少?
- weglogic 创建domian启动卡住
- PCIe TLP Prefix PASID TLP Prefix介绍
- 香帅的北大金融学课笔记8 -- 债务与债券
- 如何在Ubuntu 20.04 / 18.04服务器中进入救援模式或紧急模式?
- UNIAPP中H5微信登录
- 《ai绘画》最全stable diffusion安装教程 所有软件+所有指令
热门文章
- SeaMonkey推荐
- JavaScript获取屏幕高度和宽度等信息
- 跳转go.php,go.php · 莫轻舞/go.php 站内外链跳转源码 - Gitee.com
- 图论:关于弦图的几个图论结论
- PHP代码如何被执行?
- 地址转换技术 NAT
- win7瘦身,关闭虚拟内存,页面文件,休眠
- Flutter 功能最全的JsonToDart工具(桌面Web海陆空支持)
- Debian11之 RKE2 部署 K8S 集群
- dockerer-compose搭建zookeeper集群,工作中最新亲测能用,超详细