設n個矩陣序列,其中第i個矩陣式p[i - 1] * p[i]階矩陣,給定矩陣的向量p,求一種乘法次序,使得基本運算總次數最小
設a[i][j] 為 ∏j
k = ia[k]
設cnt[i][j]為a[i][j]的最少運算次數
cnt[i][j] = min(cnt[i][k] + cnt[k + 1][j] + p[i - 1] * p[k] * p[j])
1o(n3)for (int len = 2; len <= n; ++len)216
}17}18 }
1 #include2 #include完整**3 #include4 #include5 #include6 #include7 #include8 #include
9 #include10 #include11
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
12#define mem(a,x) memset(a,x,sizeof(a))
13#define lson rt<<1,l,mid
14#define rson rt<<1|1,mid + 1,r
15#define p pair16
#define ull unsigned long long
17using
namespace
std;
18 typedef long
long
ll;19
const
int maxn = 2e5 + 10;20
const ll mod = 998244353;21
const
int inf = 0x3f3f3f3f;22
const
long
long inf = 0x3f3f3f3f3f3f3f3f;23
const
double eps = 1e-7;24
25inline ll read()
2629
while (isdigit(ch)) x = (x << 3) + (x << 1) + (ch ^ 48), ch =getchar();
30return w ? -x : x;31}
3233
int cnt[1000][1000] , s[1000][1000
];34
int p[1000
];35
intn;
36int
main()
3743
for (int len = 2; len <= n; ++len)
4458}59
}60}61 cout << cnt[1][n] <
62return0;
63 }
演算法導論 矩陣鏈乘法
問題描述 給定有n個連乘矩陣的維數,要求計算其採用最優計算次序時所用的乘法次數,即所要求計算的乘法次數最少。例如,給定三個連乘矩陣的維數分別是10 100,100 5和5 50,採用 a1a2 a3,乘法次數為10 100 5 10 5 50 7500次,而採用a1 a2a3 乘法次數為100 5 ...
矩陣鏈乘法問題 (演算法)
一 概述 以兩個矩陣相乘為例,a1 a2,a1和a2為兩個矩陣,假設a1的行列數是p q,a2的行列數是q r。注意這裡由於是a1乘以a2,所以a1的列數要等於a2的行數,否則無法做矩陣乘法,滿足上述條件的矩陣,我們稱之為 相容 的。那麼對於a1 a2而言,我們需要分別執行p r次對應a1的行元素乘...
Python演算法 矩陣鏈乘法
題目解析參考 動態規劃 矩陣鏈乘法 矩陣乘法是乙個滿足結合律的運算。顯然,對於矩陣a b c來說,ab c 與 a bc 是等價的,我們可以根據自己的心情選擇任意的運算順序,總之,結果都是一樣的。糟糕的是,對計算機來說可不是這麼回事,若我們假定矩陣 a 10,20 b 20,30 c 30,40 那...