題目
輸入n個矩陣的維度和一些矩陣鏈乘表示式,輸出乘法的次數。如果無法進行乘法,輸出error.假定a是m*n矩陣,b是n*p矩陣,則乘法次數為m*n*p;如果a的列數不等於b的行數,則乘法無法進行。
解題思路
本體的關鍵是解析表示式。本題的表示式比較簡單,可以用乙個棧來完成:遇到字母時直接入棧,遇到右括號時出棧(出棧兩個並計算,然後將結果入棧)。因為輸入保證合法,左括號不用管。
**實現
1 #include2 #include3 #include4 #include5
using
namespace
std;67
struct
matrix
811 }m[26
];12
13 stacks;
1415
intmain()
1626
string
expr;
27while (cin >>expr)
2842 res += m2.a * m2.b *m1.b;43}
44}45if (flag) printf("
error\n");
46else printf("
%d\n
", res);47}
48return0;
49 }
最優矩陣鏈乘(表示式上的動態規劃)
例如 假設a b c矩陣分別是 2 x 3 3 x 4 4 x 5 的,則 a x b x c 的運算量是 2 x 3 x 4 2 x 4 x 5 64,但是 a x b x c 的運算量是 3 x 4 x 5 2 x 3 x 5 90。想想運算量為什麼是這麼計算的。顯然第一種計算方法比較節省計算量...
表示式解析
1 本文目標 分析用堆疊解析算術表示式的基本方法。給出的示例 能解析任何包括 和0到9數字組成的算術表示式。2 中綴表示式和字尾表示式 中綴表示式就是通常所說的算術表示式,比如 1 2 3 4。字尾表示式是指通過解析後,運算子在運算數之後的表示式,比如上式解析成字尾表示式就是12 3 4 這種表示式...
最優矩陣鏈乘
問題描述 乙個n m矩陣由n行m列共n m個數排列而成。兩個矩陣a和b可以相乘當且僅當a的列數等於b的行數。乙個n m的矩陣乘以乙個m p的矩陣等於乙個n p的矩陣,運算量為nmp。矩陣乘法滿足結合律,a b c可以表示成 a b c或者是a b c 兩者的運算量卻不同。例如當a 2 3 b 3 4...