藍橋杯 矩陣乘法

2021-08-16 20:22:45 字數 864 閱讀 1225

題目大意:有n個矩陣,大小分別為a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],現要將它們依次相乘,只能使用結合率,求最少需要多少次運算。兩個大小分別為p*q和q*r的矩陣相乘時的運算次數計為p*q*r。

題目分析:本題是計算一系列連乘矩陣的最小運算次數。這是一道非常經典的動態規劃的題目。

動態規劃演算法的特點是:

1.把原始問題劃分成一系列子問題

2.求解每個子問題僅一次,並將其結果儲存在乙個表中,以後用到時直接訪問,不重複計算,節省計算時間。

3.自底向上計算

回到本題上來,本題解法:

設cost[i][j]表示計算第i個矩陣ai與第j個矩陣aj所需的代價,矩陣ai=a(i-1)*ai,矩陣aj=a(j-1)*aj

那麼,我們可以得到cost的代價轉換方程:

當i==j時,cost[i][j]=0;

當i也就是說,可以在ai與aj之間的任意第k個位置切一刀,有j-i中切法,比較這些切法,求出最小值,即最小代價

本題需要注意的地方有:陣列型別要設定為long long型; 乙個最大值的邊界要盡量大一點,如1e18.

另外,本題的最後一組樣例很容易不通過,得90分。我是通過在最裡層迴圈將u=i+j,最後才ac

**展示:

#include using namespace std;

int main()

for(int i=1;i<=n;i++)

cost[i][i] = 0;

long long temp;

int u = 0;

for(int i=1;i<=n;i++)}}

}cout

}

藍橋杯 矩陣乘法

演算法訓練 矩陣乘法 時間限制 1.0s 記憶體限制 512.0mb 問題描述 輸入兩個矩陣,分別是m s,s n大小。輸出兩個矩陣相乘的結果。輸入格式 第一行,空格隔開的三個正整數m,s,n 均不超過200 接下來m行,每行s個空格隔開的整數,表示矩陣a i,j 接下來s行,每行n個空格隔開的整數...

藍橋杯 矩陣乘法

演算法訓練 矩陣乘法 時間限制 1.0s 記憶體限制 512.0mb 問題描述 輸入兩個矩陣,分別是m s,s n大小。輸出兩個矩陣相乘的結果。輸入格式 第一行,空格隔開的三個正整數m,s,n 均不超過200 接下來m行,每行s個空格隔開的整數,表示矩陣a i,j 接下來s行,每行n個空格隔開的整數...

藍橋杯 矩陣乘法

問題描述 有n個矩陣,大小分別為a0 a1,a1 a2,a2 a3,a n 1 a n 現要將它們依次相乘,只能使用結合率,求最少需要多少次運算。兩個大小分別為p q和q r的矩陣相乘時的運算次數計為p q r。輸入格式 輸入的第一行包含乙個整數n,表示矩陣的個數。第二行包含n 1個數,表示給定的矩...