矩陣乘法優化 poj3318 隨機矩陣

2021-08-06 01:50:40 字數 1170 閱讀 3983

給定矩陣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 方程推出來 假如不能手推,...