zoukankan      html  css  js  c++  java
  • POJ 3318-Matrix Multiplication (n方求矩阵相乘相等)

    题意

    有3个n*n的矩阵A,B,C,问AB是否等于C。

    传送门

    思路

    题目描述很简单,就是用矩阵乘法,但是很明显矩阵乘法的时间复杂度为O(n^3),很明显超时。那怎么改进呢?就是用压缩矩阵的方法

    设矩阵R是 1*n 的矩阵,根据矩阵的性质,若 A * B * R = C * R,那么A * B = C。由此可以看出来,虽然多成了一个矩阵,但是时间复杂度成了(O(n^2))。那么问题是这个R的行列式该怎么设定,有人用的随机算法,但是随机算法可能在关键点上出现错误,可以将R设定成一个递增的数列({1,2,3…})

    Code

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int maxn = 510;
    
    int n;
    int ra[maxn], rab[maxn], rc[maxn];
    
    int a[maxn][maxn], b[maxn][maxn], c[maxn][maxn];
    
    bool check() {
        for (int i = 0; i < n; ++i) {
            if(rab[i] != rc[i]) return false;
        }
        return true;
    }
    
    int main() {
        while(scanf("%d", &n)==1) {
            for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) scanf("%d", &a[i][j]);
            for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) scanf("%d", &b[i][j]);
            for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) scanf("%d", &c[i][j]);
    
            for (int i = 0; i < n; ++i) ra[i] = rab[i] = rc[i] = 0;
    
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < n; ++j)
                    ra[i] += a[j][i]*(j+1);
            }
    
    //        for (int i = 0; i < n; ++i) printf("%d ", ra[i]); puts("");
    
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < n; ++j)
                    rab[i] += ra[j]*b[j][i];
            }
    
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < n; ++j)
                    rc[i] += c[j][i]*(j+1);
            }
    //        for (int i = 0; i < n; ++i) printf("%d ", rc[i]); puts("");
    
            puts(check()? "YES": "NO");
        }
        return 0;
    }
    
  • 相关阅读:
    模板模式变形
    理解volatitle带来的可见性
    数据库隔离级别
    Spring对POST内容进行处理的坑
    动态加载JS和CSS
    MySQL性能优化总结
    JS自执行匿名函数
    CDATA为何物?
    如何编写高效的jQuery代码
    war和war exploded区别
  • 原文地址:https://www.cnblogs.com/acerkoo/p/11618834.html
Copyright © 2011-2022 走看看