• 矩阵快速幂——将运算推广到矩阵上HDU 1575


    /*

    本题的思路比较简单,就是将递推公式写出来,然后表达成为一个矩阵的形式

    最后通过计算就可以得到一个符合题目要求的矩阵,

    然后就是将矩阵上面所有的对角线元素相加

    得到的结果即为所求的目标

    */

    #include<cstdio> 
    #include<cstring> 
    using namespace std; 
    const int maxn = 15; 
    #define mod 9973 
    int res[maxn][maxn]; 
    int n; 
    void mul(int a[][15],int b[][15],int c[][15]){ 
        int temp[15][15];  memset(temp,0,sizeof(temp)); 
        for(int i=0;i<n;i++) 
          for(int j=0;j<n;j++) 
            for(int k=0;k<n;k++){
               temp[i][j]=(temp[i][j]+ a[i][k]*b[k][j] )%mod; 
            } 
        memcpy(c,temp,sizeof(temp)); 
    }
    void pow(int a[][15],int k){ 
         while(k){ 
             if(k&1){ 
                 mul(res,a,res); 
             } 
             mul(a,a,a); 
             k>>=1; 
         //    printf("%d ",k); 
         } 

    int main(){ 
        int T,k; 
        int a[maxn][maxn]; 
        scanf("%d",&T); 
        while(T--){ 
            scanf("%d%d",&n,&k); 
            for(int i=0;i<n;i++)  for(int j=0;j<n;j++)  res[i][j]=(i==j); 
            //这个做法主要是将对角线标记出来,然后就可以与矩阵a相乘,最后得到的a矩阵就是一个对角矩阵
            for(int i=0;i<n;i++)  for(int j=0;j<n;j++)  scanf("%d",&a[i][j]); 
            pow(a,k); 
            int ans=0; 
            for(int i=0;i<n;i++) ans+=res[i][i]; 
            printf("%d ",ans%mod); 
        } 
        return 0; 

    //自己现在最大的问题就是知道矩阵相乘的方法,但是将一个数组的问题处理好就没办法了……

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////

    矩阵方面的问题处理参考方式

    矩阵乘法
    struct Matrix{
        long long mat[N][N];
        Matrix operator*(const Matrix m)const{
            Matrix tmp;
            for(int i = 0;i < n;i++){
                for(int j = 0;j < n;j++){
                    tmp.mat[i][j] = 0;//完成初始化
                    for(int k = 0;k < n;k++){
                        tmp.mat[i][j] += mat[i][k]*m.mat[k][j]%MOD;
                        tmp.mat[i][j] %= MOD;
                    }}}
            return tmp;
    //这个是通过new一个空间后达到目的的,所以后面会有空间的保留,可以通过这种方式将数组传递下来
        }
    };

    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    配置Hibernate的二级缓存
    shiro安全三部曲
    将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置
    将 Shiro 作为应用的权限基础 四:shiro的配置说明
    将 Shiro 作为应用的权限基础 三:基于注解实现的授权认证过程
    将 Shiro 作为应用的权限基础 二:基于SpringMVC实现的认证过程
    将 Shiro 作为应用的权限基础 一:shiro的整体架构
    基于Spring框架的Shiro配置
    shior笔记
    每天学习点jquery
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/3853444.html
Copyright © 2020-2023  润新知