zoukankan      html  css  js  c++  java
  • 矩阵快速幂——将运算推广到矩阵上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一个空间后达到目的的,所以后面会有空间的保留,可以通过这种方式将数组传递下来
        }
    };

    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    html 输入框 只能输入数字 只能输入字母数字 等组合
    element中table高度自适应问题
    设置千分位问题(改变数据结构形式--转成字符串)
    在element的table接受数据设置千分位问题(不改变数据类型)
    element在使用tab页时,echarts只在第一个页面加载(第二个tab页也在默认tab页显示)问题
    css1
    B/S(Web)实时通讯解决方案
    WebRTC介绍及简单应用
    webpack的编译流程
    01 写一个 mySetInterVal(fn, a, b),每次间隔 a,a+b,a+2b 的时间,然后写一个 myClear,停止上面的 mySetInterVal
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/3853444.html
Copyright © 2011-2022 走看看