給定n個矩陣{a1,a2,…,an}(n<=20),其中ai與ai+1是可乘的,i=1,2…,n-1。第i個矩陣的維數用pi−1,pi來表示。如何確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。例如,給定三個連乘矩陣的維數陣列p為:10,100,5,50,即分別是10 ×100,100×5和5×50,採用(a1a2)a3,乘法次數為10×100×5+10×5×50=7500次,而採用a1(a2a3),乘法次數為100×5×50+10×100×50=75000次乘法,顯然,最好的次序是(a1a2)a3,乘法次數為7500次。
輸入格式:
輸入有兩行。第一行乙個n表示矩陣的個數;第二行有n+1個數,分別為p0,p1…pn。
輸出格式:
乙個數,表示最少的乘法次數。
輸入樣例:
6
3035155
1020
25
輸出樣例:
15125
#include
using
namespace std;
#define rep(i, l, r) for(int i = l; i <= r; i++)
#define rep1(i, l, r) for(int i = l; i < r; i++)
#define ll long long
#define inf 0x3f3f3f3f
int p[
10005
], m[
10005][
10005
], s[
10005][
10005];
void
matrixchain
(int n)}}
}}intmain()
7 10 矩陣A乘以B 10 分
7 10 矩陣a乘以b 10 分 給定兩個矩陣a和b,要求你計算它們的乘積矩陣ab。需要注意的是,只有規模匹配的矩陣才可以相乘。即若a有r a行 ca列,b有rb 行 c b列,則只有c a與r b 相等時,兩個矩陣才能相乘。輸入格式 輸入先後給出兩個矩陣a和b。對於每個矩陣,首先在一行中給出其行數...
矩陣連乘問題
矩陣連乘問題 應用動態規劃演算法,將前面計算的重複值儲存,一次來推進下一步的計算,直到得到m 1 n 的值,為最少的乘法次數 m i j 表示計算a i.j 所需的最少數乘次數 m i j min i s i j 記錄斷開位置,也就是最少計算次數的中間位置。include using namespa...
矩陣連乘問題
由於矩陣的乘法滿足結合律,故計算矩陣的連乘積可以有許多不同的計算次序。這中計算次序 可以用加括號的方式來確定。例如,矩陣連乘積a1a2a3a4可以有5種不同的完全加括號方式 a1 a2 a3a4 a1 a2a3 a4 a1a2 a3a4 a1 a2a3 a4 a1a2 a3 a4 矩陣a和b可乘的條...