給定矩陣a,b,c,求檢驗a * b 是否等於c。n = 500
普通矩陣乘法是o(n^3)
但是如果用乙個1 * n的矩陣和n * n矩陣相乘只需要o(n^2),所以可以用乙個隨機矩陣r * a * b ?= r * c
//rand()
隨機生成
[0,rand_max]的數
//如果想要
[0,n]
內的隨機數
//n比rand_max
小,取餘
//n比rand_max
大,1.0 * rand() / rand_max
可以得到
[0,1]
內隨機數,再乘以
n即可(
ps:在
n很大時時候會產生鋸齒,精度不大)
//1.
為什麼用
int,用
long long
就過不了?
c++ac?
//!隨機矩陣要對n取餘!
#include
#include
#include
#include
#include
using
namespace
std;
const
intmaxn =
500+5;
const
intmod =
1e9+7;
class
matrix
void
init() }
void
input() }
} };
class
rand_m
void
init_rand() }
void
init() };
void
multiply(
rand_m
&rd,
matrix
&a,rand_m
&l) l.
m[i] = sum; }
}int
main()
if(fg)
printf
("yes\n");
else
printf
("no\n");
} return0;
}
poj3318 隨機化驗證
題意 驗證兩個矩陣a b相乘是否等於c 思路 直接相乘的話n 3,不行 可以加入乙個輔助行矩陣h,如果a b c,那麼 h a b h c,因為h a 之後還是乙個行矩陣,時間複雜度為n 2。不過為了避免錯誤,h陣列需要隨機。code include include include includeu...
POJ 3213 矩陣乘法(優化)
思路 1.暴力出奇蹟 n 1000 n 3矩陣乘法竟然能卡過。tips 不要亂寫讀入優化,這玩意兒加了超時,不加ac 2.注意題目中的 最多只能有乙個地方不一樣,我就想到了 能不能用一行的和來優化一下。一次算一行 我們可以手動模擬一下。發現了乙個規律 本人的草稿紙 略亂 我就模擬了一下答案的第一行。...
矩陣乘法優化DP
定義三個矩陣a,b,c,其中行和列分別為 m times n,n times p,m times p 其中行是從上往下數的,列是從左往右數的 c sum a times b 矩陣乘法具有結合律,但沒有交換律,可以乘方 求逆。做矩陣優化dp的題目步驟 1 quad 把 dp 方程推出來 假如不能手推,...