首页 > 代码库 > hdu--4920--原来一直写了速度慢的矩阵乘法

hdu--4920--原来一直写了速度慢的矩阵乘法

这题....tle到落泪啊

后来 discuss里面的一个人 提供了一个链接 一下子 明白了 自己以前怎么没有注意过呢?

传送

然后 只要按照第二种写法 果然AC了... 虽然时间还是卡的很紧 但起码不是tle了

 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4  5 const int size = 810; 6 int x[size][size]; 7 int y[size][size]; 8 int z[size][size]; 9 10 int main()11 {12     cin.sync_with_stdio(false);13     int n , num;14     while( cin >> n )15     {16         memset( z , 0 , sizeof(z) );17         for( int i = 0 ; i<n ; i++ )18         {19             for( int j = 0 ; j<n ; j++ )20             {21                 cin >> num;22                 x[i][j] = num % 3;23             }24         }25         for( int i = 0 ; i<n ; i++ )26         {27             for( int j = 0 ; j<n ; j++ )28             {29                 cin >> num;30                 y[i][j] = num % 3;31             }32         }33         for( int i = 0 ; i<n ; i++ )34         {35             for( int k = 0 ; k<n ; k++ )36             {37                 if( x[i][k] )38                 {39                     for( int j = 0 ; j<n ; j++ )40                     {41                         z[i][j] += x[i][k] * y[k][j];42                     }43                 }44             }45         }46         for( int i = 0 ; i<n ; i++ )47         {48             cout << (z[i][0]%3);49             for( int j = 1 ; j<n ; j++ )50             {51                 cout << " " << (z[i][j]%3) ;52             }53             cout << endl;54         }55     }56     return 0;57 }
View Code

这边 还有一个很重要的判断

if( x[i][k] )

有没有这句话 时间差了300多Ms 因为这样一下子剪枝了很多不用进入for循环了

 

today:

  我遇到猫在潜水 却没遇到你

  我遇到狗在攀岩 却没遇到你

  我遇到夏天飘雪 却没遇到你

  我遇到冬天打雷 却没遇到你

  我遇到所有的不平凡

  却一直遇不到平凡的你

   

 

hdu--4920--原来一直写了速度慢的矩阵乘法