ASC(1)E(矩阵快速幂+简单DP)

Nice Patterns Strike Back

Time Limit: 20000/10000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others)

SubmitStatisticNext
Problem

Problem Description

You might have noticed that there is the new fashion among rich people to have their yards tiled with black and white tiles, forming a pattern. The company Broken Tiles is well known as the best tiling company
in our region. It provides the widest choices of nice patterns to tile your yard with. The pattern is nice if there is no square of size 2 × 2, such that all tiles in it have the same color. So patterns on the figure 1 are nice, while patterns on the figure
2 are not.

The president of the company wonders whether the variety of nice patterns he can provide to the clients is large enough. Thus he asks you to find out the number of nice patterns that can be used to tile the
yard of size N × M . Now he is interested in the long term estimation, so he suggests N ≤ 10100. However, he does not
like big numbers, so he asks you to find the answer modulo P .

Input

The input file contains three integer numbers: N (1 ≤ N ≤ 10100), M (1 ≤ M ≤ 5) and P (1 ≤ P ≤10000).

Output

Write the number of nice patterns of size N × M modulo P to the output file.

Sample Input

2 2 5
3 3 23

Sample Output

4
0

题意:RT

思路:用dp[i]表示前i行所有方案数,那么可以从dp[i]转移到dp[i+1],这个只需要累加第i和第i+1行满足的情况即可

但是n很大,所以是不可能for一遍n来求的

不难发现,每次的转移都是一样的,即只需要判断相邻2行的满足情况即可

由于m<=5,可以用状态压缩来表示相邻两行格子的状态,1代表黑,0代表白,构造一个矩阵M[i][j]

如果M[i][j]=1代表上一行的状态i和当前行的状态j是满足的

所以有dp[i]=( M^(i-1) )*dp[1],其中dp[1]=(1<<m)代表所有的方案都满足

而M^(i-1)可以用经典的矩阵快速幂来求得

时间: 2024-10-08 00:37:48

ASC(1)E(矩阵快速幂+简单DP)的相关文章

poj3744之矩阵快速幂+概率DP

Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4410   Accepted: 1151 Description YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into the enemy's base. After overcoming a series difficulties,

矩阵快速幂 优化dp 模板

相关博客 :https://blog.csdn.net/china_xyc/article/details/89819376#commentBox 关于能用矩阵乘法优化的DP题目,有如下几个要求: 转移式只有加法,清零,减法etc.,max和min运算不允许 转移式中关于前几位dp结果得到的系数必须是常量 转移次数一般超级多 由于转移次数多,一般都要模一个int范围内的数 综上,举一个例子: dp[i]=a×dp[i−1]+b×dp[i−2]+c×dp[i−3] 其中,a,b,c是常量,而在需要

hihoCoder #1151 : 骨牌覆盖问题&#183;二 (矩阵快速幂,DP)

题意:给一个3*n的矩阵,要求用1*2的骨牌来填满,有多少种方案? 思路: 官网题解用的仍然是矩阵快速幂的方式.复杂度O(logn*83). 这样做需要构造一个23*23的矩阵,这个矩阵自乘n-1次,再来乘以初始矩阵init{0,0,0,0,0,0,0,1}后,变成矩阵ans{x,x,x,x,x,x,x,y},y就是答案了,而x不必管. 主要在这个矩阵的构造,假设棋盘是放竖直的(即n*3),那么考虑在第i行进行填放,需要考虑到第i-1行的所有可能的状态(注意i-2行必须是已经填满了,否则第i行无

POJ3734Blocks矩阵快速幂加dp思想

#include <cstdio> #include <algorithm> #include <iostream> #include <vector> using namespace std; typedef vector<int> vec; typedef vector<vec> mat; const int M=10007; typedef long long LL; mat mul(mat &A,mat &B)

排队 矩阵快速幂优化dp

\(T1\) 排队 ? Description ?? 抢饭是高中生活的一部分,现在有一列队伍长度为 \(n\),(注意:由于人与人之间要保持距离,且不同情况所保持的距离大小不同,所以长度并不能直接体现队列的人数).已知男男之间的距离为 \(a\),男女之间距离为 bb,女女之间距离为 \(c\).一个男生打饭时间为 \(d\),一个女生打饭时间为 \(e\),求所有情况的排队时间总和(忽略身体的大小对队伍长度的贡献),答案对 $10^{9}+7 $取模. ?? Input Format 一行六个

bzoj 4000 矩阵快速幂优化DP

建立矩阵,跑快速幂 1 /************************************************************** 2 Problem: 4000 3 User: idy002 4 Language: C++ 5 Result: Accepted 6 Time:32 ms 7 Memory:836 kb 8 ****************************************************************/ 9 10 #inclu

LibreOJ #2325. 「清华集训 2017」小Y和恐怖的奴隶主(矩阵快速幂优化DP)

哇这题剧毒,卡了好久常数才过T_T 设$f(i,s)$为到第$i$轮攻击,怪物状态为$s$时对boss的期望伤害,$sum$为状态$s$所表示的怪物个数,得到朴素的DP方程$f(i,s)=\sum \frac{1}{sum+1}*(f(i+1,s')+[s==s'])$ 状态数只有$C_{8+3}^3=165$个,所以就可以矩乘优化啦.再加上一个用于转移的$1$,矩阵大小是$166*166$的,因为多组询问,所以可以先把$2$的所有次幂的矩阵都预处理出来. 然后会发现复杂度是$O(T*166^3

hihoCoder #1162 : 骨牌覆盖问题&#183;三 (矩阵快速幂,DP)

题意:有一个k*n的棋盘,要求用1*2的骨牌来铺满,有多少种方案?(k<8,n<100000001) 思路: 由于k是比较小,但是又不那么小,可以专门构造这样的一个矩阵M,使得只要我们有一个初始矩阵R,求得ans矩阵,然后答案就在ans中了.ans=R*Mn. M的大小应该是2k*2k,所以当k稍微大一些就不合适存储这个矩阵了,而且里面大部分都是0,很浪费.由于k<8,所以M的大小为128*128是可以接受的.复杂度是O(23*k*logn),大概是千万级别的. 1 #include &

POJ 3744 Scout YYF I(矩阵快速幂 概率dp)

题目链接:http://poj.org/problem?id=3744 Description YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into the enemy's base. After overcoming a series difficulties, YYF is now at the start of enemy's famous "mine road"