矩陣乘法題
就是狀壓一下一列的狀態然後預處理出某兩種狀態的轉移的方案數
然後構造乙個矩陣a[i][j]表示i的狀態到j的狀態的條數
然後直接矩陣乘法就可以了
#include#include#include#includeusing namespace std;
const int mod=1000000007;
typedef vectorvec;
typedef vectormat;
// a*b
mat mul(mat& a, mat& b)
} }return c;
}// a^n
mat pow(mat a,int n)
while(n)
n>>=1; a=mul(a,a);
}return b;
}int n,m;
long long dp[1<<5][1<<5];
void dfs(int c,int pre,int now)
if(c==n)
dfs(c+1,pre<<1,now<<1|1);
dfs(c+1,pre<<1|1,now<<1);
dfs(c+2,pre<<2,now<<2);
}int main(){
cin>>m>>n;
mat a(1<
51nod 1033 骨牌覆蓋 V2
題意 1033 骨牌覆蓋 v2 基準時間限制 1 秒 空間限制 131072 kb 分值 320 難度 7級演算法題 在m n的乙個長方形方格中,用乙個1 2的骨牌排滿方格。問有多少種不同的排列方法。n 5 例如 3 2的方格,共有3種不同的排法。由於方案的數量巨大,只輸出 mod 10 9 7 的...
51nod 1033 骨牌覆蓋 V2
思路 狀態壓縮dp 矩陣快速冪 對於每行最多只有5列,因此可以列舉出它們的全部狀態 0 1 1.由於是1x2的骨牌,則二進位制數11,110是合法的,1,10是不合法的,那麼其合法的狀態只有d 2.對於第i行的狀態只與第i 1行的狀態有關,那麼對於第i 1行的狀態a中二進位制位為0的就必須要在第i行...
51nod 1033 骨牌覆蓋 V2(矩陣快速冪)
思路 這類題主要的難點就在於狀態的轉移,可以先看看這道題 骨牌覆蓋問題 三 中的提示 dp i j 表示從狀態i轉換成狀態j共有多少種方法 二進位制下的01表示骨牌是否覆蓋 則m行的排法就是dp m 1 的值 第0行的狀態為0,第m行的狀態為 1 n 1,則需進行m 1次dp dp dp 因此,我們...