矩陣鏈乘法,新增括號

2021-07-03 12:46:08 字數 1026 閱讀 1301

給定n個矩陣{a1,a2,…,an},其中ai與ai+1是可乘的,i=1,2 ,…,n-1。如何確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。 

input

有n個矩陣連乘,用一行有n+1個數陣列表示,表示是n個矩陣的行及第n個矩陣的列,它們之間用空格隔開. 

output

你的輸出應該有c行,即每組測試資料的輸出佔一行,它是計算出的矩陣最少連乘積次數,輸出最優全括號結構

sample input

10 100 5 50
sample output

7500
((a1a2)a3)

#include#include#include #define n 3

int s[n+1][n+1]; //s[i][j]中記錄了對ai...aj進行**的最優的k值

void print_optimal_parens(int i,int j) //定義函式列印最優全括號的結果

} int main()

{ int matrix[n+1]; //matrix中記錄矩陣的維數

int i,j,k,q;

int m[n+1][n+1]; //m中記錄矩陣連乘的次數

for(i=0;i<=n;i++)

scanf("%d",&matrix[i]);

memset(m,0,(n+1)*(n+1)*sizeof(int));

for(j=1;j<=n;j++)

for (i=j;i>=1;i--) //當i=j時,m[i][j]=0,

{ //當i

矩陣鏈乘法

設m i j 為計算矩陣ai.j所需標量乘法運算次數的最小值。對整個問題計算ai.n的最小代價就是m i,n 使用輔助表是s 1.n,1.n 來記錄計算m i,j 時取得最優代價處k的值。k是裂開的位置。include define n 6 void matrix int p,int m n 1 i...

矩陣鏈乘法

a1,a2.an,n個矩陣,矩陣ai的維數為p i 1 p i 資料矩陣鏈乘法加全部括號,使得計算乘法的次數最少 對矩陣ai,ai 1,其維數分別為p i 1 p i p i p i 1 ai ai 1要執行乘法運算的次數為p i 1 p i p i 1 m i j 為矩陣ai ai 1 aj最少的...

矩陣鏈乘法

題目難度 對於矩陣鏈乘法這道題目,我們先明確乙個概念 對於n各需要相乘的矩陣所構成的 鏈 要計算其乘積a1a2.an。我們需要對其加上n 1個括號,來確定其運算順序。例 明白括號概念之後,我們還需明白何為矩陣相乘。矩陣相乘或不如稱為縱橫相乘,意思就是對於p q,以及q r的兩個矩陣,對於第乙個矩陣的...