• 填格子3*N的方框使用2*1的矩形进行填充


    考虑每个位置的前一个状态 可以发现有 

     

    我们分别给他们编号 假设 现在填充到了i+1行,我们可以发现从i行可以通过填充转到i+1行的状态

    第i行第j列表示 可以 从上一个转态 j 可以到达这个状态的j , 然后又了这个转态转化在使用矩阵

    {00000001}为初始状态 

    #include <iostream>
    #include <algorithm>
    #include <string.h>
    #include <vector>
    #include <cstdio>
    using namespace std;
    typedef long long LL;
    const LL mod=12357;
    struct Matir{
       LL va[8][8];
       Matir(){
           memset(va,0,sizeof(va));
       }
       Matir operator *(const Matir rhs){
          Matir ans;
             for(int i=0; i<8; i++)
             for(int j=0; j<8; j++){
                     for(int k=0; k<8; k++){
                       ans.va[i][j]=(ans.va[i][j]+(va[i][k]*rhs.va[k][j])%mod )%mod;
                     }
             }
             return ans;
       }
    }model;
    Matir solve(int N){
         Matir ans;
         for(int i=0; i<8; i++)ans.va[i][i]=1;
         Matir A=model;
         while(N){
            if(N&1)ans=ans*A;
            N>>=1;
            A=A*A;
         }
         return ans;
    }
    int main()
    {
        for(int i=0; i<8; i++)
            model.va[i][8-i-1]=1;
            model.va[3][7]=1; model.va[6][7]=1; model.va[7][3]=1;model.va[7][6]=1;
          int N;
          while(scanf("%d",&N)==1){
              if(N&1){
                 printf("0
    ");continue;
              }
              Matir ans=solve(N);
              cout<<ans.va[7][7]<<endl;
          }
        return 0;
    }

  • 相关阅读:
    loadrunner 11安装教程
    测试用例
    软件测试分类
    软件测试模型
    VMware Workstation安装Red hat7.0联网问题总结
    Python网络编程基础pdf
    Python数据可视化编程实战pdf
    Python数据分析实战
    Python数据科学手册
    Python入门经典. 以解决计算问题为导向的Python编程实践
  • 原文地址:https://www.cnblogs.com/Opaser/p/4444478.html
Copyright © 2020-2023  润新知