hdu 6185

来源:互联网 发布:市场调研软件 编辑:程序博客网 时间:2024/06/15 16:35

题意:4*n矩形由 1*2 和 2*1 的矩形组成的方案数

分析:分析出n+1的情况,矩阵幂

具体看这里:http://blog.csdn.net/a664607530/article/details/77619554

#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <algorithm>#include <queue>#include <vector>#include <set>#include <stack>#include <map>#include <climits>using namespace std;#define LL long longconst int INF = 0x3f3f3f3f;const LL mod = 1e9 + 7;LL n;struct Matrix{    LL v[6][6];    Matrix()    {        memset(v, 0, sizeof v);    }} dan;Matrix mul(Matrix a, Matrix b, int d){    Matrix ans;    for (int i = 0; i < d; i++)        for (int j = 0; j < d; j++)            for (int k = 0; k < d; k++)                ans.v[i][j] = (ans.v[i][j] + a.v[i][k] * b.v[k][j] % mod) % mod;    return ans;}Matrix pow(Matrix a, LL k, int d){    Matrix ans = dan;    while (k)    {        if (k & 1) ans = mul(ans, a, d);        k >>= 1;        a = mul(a, a, d);    }    return ans;}int main(){    while (~scanf("%lld", &n))    {        dan.v[0][0] = dan.v[0][1] = dan.v[0][2] = 1;        dan.v[0][3] = 2;        Matrix a, ans;        a.v[0][0] = a.v[0][1] = a.v[0][2] = 1, a.v[0][3] = 2;        a.v[1][0] = 1;        a.v[2][0] = a.v[2][4] = 1;        a.v[3][0] = a.v[3][3] = 1;        a.v[4][2] = 1;        ans = pow(a, n - 1, 5);        printf("%lld\n", ans.v[0][0]);    }    return 0;}


原创粉丝点击