【poj3420】递推式转矩阵乘法
历史性的时刻!!!
推了一晚上!和hyc一起萌萌哒地推出来了!!
被摧残蹂躏的智商啊!!!
然而炒鸡高兴!!
(请不要介意蒟蒻的内心独白。。)
设a[i]为扫到第i行时的方案数。
易知,对于一行1*4的格子,只有一种方案把它铺满。
首先,对于当前的第i行,如果它不和第i-1行有联系(也就是它是独立的一行),那么就有1*a[i-1]=a[i-1]种方案。
如果第i行和第i-1行有联系(2行间互相联系),那么共有一下四种方案:
如果第i行、第i-1行、第i-2行都有联系(3行间两两联系),那么共有两种方案(此图以及的轴对称图形):
如果第i行、第i-1行、第i-2行、第i-3行都有联系(4行间两两联系),那么共有三种方案(上面两种方案加下面一种):
……
一直递推下去,我们可以发现:
2行间相互联系 --> 4种方案
3行间相互联系 --> 2种方案
4行间相互联系 --> 3种方案
……
奇数行相互联系(n>2) --> 2种方案
偶数行相互联系(n>2) --> 3种方案
所以,我们可以得出:
a[i]=a[i-1]+4*a[i-2]+2*(a[i-3]+a[i-5]+……+a[(i&1)?0:1])+3*(a[i-4]+a[i-6]+……+a[(i&1)?1:0]);
设s=a[i-3]+a[i-5]+……+a[(i&1)?0:1],t=a[i-4]+a[i-6]+……+a[(i&1)?1:0];
该递推式可以转化为矩阵乘法:
代码如下:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std; const int N=;
int Mod;
struct node{
int s[][];
int sx,sy;
}; node mult(node a,node b)
{
node t;
t.sx=a.sx;t.sy=b.sy;
memset(t.s,,sizeof(t.s));
for(int i=;i<=a.sx;i++)
for(int j=;j<=b.sy;j++)
for(int k=;k<=a.sx;k++)
{
t.s[i][j]+=(a.s[i][k]*b.s[k][j])%Mod;
t.s[i][j]%=Mod;
}
return t;
} void quickpow(int n)
{
if(n==) {printf("0\n");return ;}
node a;
a.s[][]=%Mod,a.s[][]=%Mod,a.s[][]=%Mod,a.s[][]=%Mod;
a.s[][]=%Mod,a.s[][]=%Mod,a.s[][]=%Mod,a.s[][]=%Mod;
a.s[][]=%Mod,a.s[][]=%Mod,a.s[][]=%Mod,a.s[][]=%Mod;
a.s[][]=%Mod,a.s[][]=%Mod,a.s[][]=%Mod,a.s[][]=%Mod;
a.sx=;a.sy=;
node b;
b.s[][]=b.s[][]=b.s[][]=b.s[][]=%Mod;
b.s[][]=b.s[][]=b.s[][]=%Mod;
b.s[][]=b.s[][]=b.s[][]=%Mod;
b.s[][]=b.s[][]=b.s[][]=%Mod;
b.s[][]=b.s[][]=b.s[][]=%Mod;
b.sx=;b.sy=;
while(n)
{
if(n&) b = mult(a,b);
a = mult(a,a);
n>>=;
}
node c;
c.sx=;c.sy=;
c.s[][]=%Mod;c.s[][]=c.s[][]=c.s[][]=%Mod;
c = mult(b,c);
printf("%d\n",c.s[][]);
return ;
} int main()
{
while()
{
int x;
scanf("%d%d",&x,&Mod);
if(x==) return ;
quickpow(x);
}
return ;
}
【poj3420】递推式转矩阵乘法的更多相关文章
- HDU 1757 A Simple Math Problem 【矩阵经典7 构造矩阵递推式】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1757 A Simple Math Problem Time Limit: 3000/1000 MS (J ...
- P1067Warcraft III 守望者的烦恼(十大矩阵问题之七求递推式)
https://vijos.org/p/1067 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她 ...
- HDU-6185-Covering(推递推式+矩阵快速幂)
Covering Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式
矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b * A B = a*A+b*C a*c+b*D c d ...
- [题解][SHOI2013]超级跳马 动态规划/递推式/矩阵快速幂优化
这道题... 让我见识了纪中的强大 这道题是来纪中第二天(7.2)做的,这么晚写题解是因为 我去学矩阵乘法啦啦啦啦啦对矩阵乘法一窍不通的童鞋戳链接啦 层层递推会TLE,正解矩阵快速幂 首先题意就是给你 ...
- hdu 1757 A Simple Math Problem (构造矩阵解决递推式问题)
题意:有一个递推式f(x) 当 x < 10 f(x) = x.当 x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + ...
- HDU - 2604 Queuing(递推式+矩阵快速幂)
Queuing Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU5950 Recursive sequence 非线性递推式 矩阵快速幂
题目传送门 题目描述:给出一个数列的第一项和第二项,计算第n项. 递推式是 f(n)=f(n-1)+2*f(n-2)+n^4. 由于n很大,所以肯定是矩阵快速幂的题目,但是矩阵快速幂只能解决线性的问题 ...
- POJ 3734 Blocks(矩阵快速幂+矩阵递推式)
题意:个n个方块涂色, 只能涂红黄蓝绿四种颜色,求最终红色和绿色都为偶数的方案数. 该题我们可以想到一个递推式 . 设a[i]表示到第i个方块为止红绿是偶数的方案数, b[i]为红绿恰有一个是偶数 ...
随机推荐
- 复制MySQL数据库A到另外一个MySQL数据库B(仅仅针对innodb数据库引擎)
方案一:(不用太大的变化my.ini文件) copy 原数据库A中的 数据库(database) ib_logfile1 ib_logfile0 ibdata1: 关闭目的数据库B: 备份 ...
- es2017中的async和await要点
1. async和await最关键的用途是以同步的写法实现了异步调用,是对Generator异步方法的简化和改进.使用Generator实现异步的缺点如下: 得有一个任务执行器来自动调用next() ...
- golang交叉编译笔记
GOOS:目标平台的操作系统(darwin.freebsd.linux.windows) GOARCH:目标平台的体系架构(386.amd64.arm) Mac 下编译 Linux 和 Windows ...
- vs2017切换设计、拆分假死的解决
今天安装了vs2017版把vs2015卸载了,原因就是vs2015运行webform后ajaxpro总是会出现time out现象.太难受了,所以决定体验一下新版本. 安装了vs2017后ajaxpr ...
- 【历史】- UNIX发展史(BSD,GNU,linux)
先前的一個理想 UNIX 系统自 1969 年 Ken Thompson 与 Dennis Ritchie 在美国贝尔电话实验室(Bell Telephone Laboratories)发展出雏形至今 ...
- 使用 TListView 控件(2)
本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...
- background 背景图铺满界面
background <body background="/image/1.png" style=" background-repeat:no-repeat ; b ...
- BZOJ4373 算术天才⑨与等差数列(线段树)
看上去很难维护,考虑找一些必要条件.首先显然最大值-最小值=k*(r-l).然后区间内的数需要模k同余.最后区间内的数两两不同(k=0除外).冷静一下可以发现这些条件组合起来就是充分的了. 考虑怎么维 ...
- bootstrap table表格属性、列属性、事件、方法
留存一份,原文地址http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/ 表格参数 表格的参数定义在 jQuery.fn.bootst ...
- 【题解】HAOI2012高速公路
一节政治课的结果……推式子+推式子+推式子…… 首先注意到一个区间里面,选择(x, y)和(y, x)的费用是一样的.所以我们把这两种情况合为一种,那么现在询问的区间为(l, r),则一共的情况就有 ...