uva442 矩陣鏈乘

2021-10-04 12:52:10 字數 1420 閱讀 3550

題目大意:給你若干個矩陣(x*y),然後給你若干種計算公式,問你在該種計算公式情況下能否進行矩陣乘法運算,若能進行,輸出需進行乘法的次數。

思路分析:首先要對矩陣的乘法運算有一定了解,首先,a(xy)和b(xy)矩陣能否進行ab運算的充要條件是是否滿足a.y==b.x,如果滿足,則會得到矩陣c(a.xb.y),這次運算進行的乘法的次數是a,xa.yb.y.下面就考慮如何進行實現,首先括號裡面是優先計算的,也就是說我們剛開始要計算的是最內層的括號裡面的表示式,也就是在碰到第乙個「)」進行運算的表示式,每碰到乙個」)「,就要進行一次矩陣運算,因此可以考慮用棧這種資料結構來實現,碰到」)「就進行矩陣運算,把運算得到的矩陣再壓入棧中,對於每乙個矩陣,需要維護的資訊是它的x和y,矩陣的型別可以用陣列下標來區分。

—————————————————————————————————————————————

sample input

9a 50 10

b 10 20

c 20 5

d 30 35

e 35 15

f 15 5

g 5 10

h 10 20

i 20 25ab

c(aa)

(ab)

(ac)

(a(bc))

((ab)c)

(((((de)f)g)h)i)

(d(e(f(g(hi)))))

((d(ef))((gh)i))

—————————————————————————————————————————————

sample output00

0error

10000

error

3500

15000

40500

47500

15125

—————————————————————————————————————————————

#include

#include

#include

#include

#include

using

namespace std;

#define maxn 30

class

nod;

nod arr[maxn]

;stack stack1;

intmain()

int sum =0;

char s1[

100]

;while

(scanf

("%s"

,s1)

!=eof)if

(s1[i]

==')')}

if(i == l)

else cout <<

"error"

<< endl;

}}

UVa442矩陣鏈乘 棧

題目如下 我用c語言實現的 如下 include define maxn 1000 10 typedef structmatrix typedef structstack int n 開頭有幾個矩陣 stack s matrix m maxn 存開始給的矩陣,最多26個 matrix pop sta...

UVA442矩陣乘法之求出多個矩陣相乘乘法的次數

這個題自己剛開始寫的,受前面那個題的影響開了倆個棧,乙個拿來存括號了,然而這個題保證輸入合法,不需要將括號入棧,另外自己剛開始還重重載了矩陣賦值函式,後來發現矩陣竟然不需要過載賦值函式,不知道為什麼矩陣不需要 過載賦值函式。include include include include includ...

Uva348最優矩陣鏈乘

題意 給出 n 個矩陣 a1,a2,an 求完全括號化方案,使得計算乘積 a1a2 an 所需乘法次數最少。並輸出方案。思路 經典區間dp。要求的是 0,n 1 的最小代價。且大區間的決策依賴於小區間。矩陣連乘的最後一定有乙個最後一次乘法,假設最後乙個乘號在第 k 個矩陣後,也就是p a1 x a2...