題目大意:給你若干個矩陣(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...