#include #include #include #include #include #include using namespace std;
#define ll long long
const int maxn=(1<<4)*4;//乙個狀態可以推出多個狀態
int pre[maxn],now[maxn];
int m,n,t,mod;
struct matrix;
void dfs(int num,int p,int q)
dfs(num+2,(p<<2)|3,(q<<2)|3);
dfs(num+1,(p<<1)|1,q<<1);
dfs(num+1,p<<1,(q<<1)|1);
}matrix mul(matrix a,matrix b)}}
return c;
}matrix pow_mod(matrix a,int b)
return s;
}int main()
return 0;}/*
用1*2的方塊填滿n*m的矩陣,當n*m為奇數時,不可能成功。
由於填充方塊可以橫豎變換,所以n和m也可以交換
每行用二進位制數表示狀態,1為有方塊,0為沒方塊(為了給下一行新增豎的方塊)
乙個橫的方塊用11表示,豎的是pre[i]=0,now[1];
pre[i],表示前一行的狀態,now[i]表示在前一行的狀態下,得到的下一行的狀態;
dp[i][now[j]]=dp[i-1][pre[j]];
現在推狀態:
前一行出現11,下一行填11
前一行出現1,下一行填0
之後用dfs找出所有的pre和now,接著就能dp了
這題中n太大,而狀態只有16(1<<4)種,則可以寫出16*16矩陣的進行矩陣連乘加速
*/
POJ 3420 矩陣乘法
題意 4 n的矩形中放入1 2的小矩形有多少種放法 分析 表示公式不會推導。沒找著有人推公式的證明了。求證明 f n f n 1 5 f n 2 f n 3 f n 4 手動算出來前4項,然後處理線性遞推式就好了 view code 1 include 2 include 3 include 4 i...
poj3744 概率dp 矩陣乘法
在一條路上有n個地雷,有個sb人按照心情走在這條路上,往前走1步的概率是p,往前走2步的概率是 1 p 求他活著走過這條路的概率。很容易想到一種dp方程 f i p f i 1 1 p f i 2 然而一看範圍 1,100000000 怎麼可能不超時呢 然後可以這麼想 只要避開了最後乙個地雷不就安全...
poj 3744 概率dp 矩陣快速冪
poj 3744 題目大概是 小明要走一段路 有p的概率走一步 1 p 的概率走兩步 然後上面有雷 問安全通過的概率 題目通過雷把路程分為多段 把每段安全通過的概率相乘 就是整段安全通過的概率 設dp i 是小明安全到i的概率 到i的方式有兩種 一種是從 i 1 走一步 第二種是從 i 2 走兩步 ...