矩陣的乘法定義如下:設a是m×p的矩陣,b是p×n的矩陣,則a與b的乘積為m×n的矩陣,記作c=ab,其中,矩陣c中的第i行第j列元素cij可以表示為:
當多個矩陣相乘時,採用不同的計算順序所需的乘法次數不相同。例如,a是50×10的矩陣,b是10×20的矩陣,c是20×5的矩陣, 計算abc有兩種方式:(ab)c和a(bc),前一種需要15000次乘法計算,後一種則只需3500次。
設a1,a2,…,an為矩陣序列,ai是階為pi−1∗pi的矩陣(1≤i≤n)。試確定矩陣的乘法順序,使得計算a1a2…an過程中元素相乘的總次數最少。
輸入格式:
每個輸入檔案為乙個測試用例,每個測試用例的第一行給出乙個正整數n(1≤n≤100),表示一共有n個矩陣a1,a2,…,an,第二行給出n+1個整數p0 ,p1…pn,以空格分隔,其中1≤pi≤100(0≤i≤n),第i個矩陣ai是階為pi−1∗pi的矩陣。
輸出格式:
獲得上述矩陣的乘積,所需的最少乘法次數。
輸入樣例:
在這裡給出一組輸入。例如:
5
3035155
1020
輸出樣例:
在這裡給出相應的輸出。例如:
11875
#include
using
namespace std;
const
int max =
1005
;int p[max]
;int m[max]
[max]
;int n;
void
matrix()
}}}}
intmain()
矩陣鏈相乘問題
給出乙個矩陣鏈,a1a2.an。求最小的相乘運算次數。如 n k 的 ai 和 k m 的a i 1 則相乘運算次數為n k m。給aia i 1 a加括號 1 i j n 求最小代價,用m i j 來記錄ai.aj最小的矩陣乘法運算次數,那麼a1.an的最優解就是m 1 n 當只有乙個矩陣時,m ...
矩陣鏈相乘Matchain
演算法設計技巧與分析 動態規劃僅供自己學習.輸入 n個矩陣的鏈的維數對應於正整數陣列r 1,2,n 是n個矩陣的行數,r n 1 是mn的列數 輸出 n個矩陣相乘的數量乘法的最小次數 例7.4 m1 5 10,m2 1 4,m3 4 6,m4 6 10,m5 10 2 c 1,1 0 c 1,2 2...
DP 矩陣鏈相乘
假設我們要用標準的矩陣乘法來計算m1,m2,m3三個矩陣的成績m1m2m3,這三個矩陣的維數分別是210,102,210,如果把m1,m2相乘,然後再與m3相乘,那麼要乘2102 2210 80次,如果代之以用m2,m3相乘的結果去乘m1,那麼乘法的次數變成了10210 210 10 400,執行m...