矩陣鏈乘的變換

2021-08-03 16:59:08 字數 877 閱讀 5672

題意:一串數,每次取掉乙個數並且將這個數與周圍兩個數相乘的結果加起來,最後取得就剩兩個數。求最小的答案。

解答:區間dp。在網上看到兩個答案:

第一種思路:dp[i][j]表示從i-1到j最終取得就剩下i-1和j所得的最小值。那麼狀態轉移方程為dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+1][j]+a[k]*a[i-1]*a[j])(i <= k < j)

**:

#include#include#include#include#includeusing namespace std;

const int maxn = 150;

const int inf = 1 << 30;

int dp[maxn][maxn];

int main()

printf("%d\n",dp[2][n]);

}return 0;

}

第二種思路:dp[i][j]表示從i到jj到最終取得就剩下i和j所得的最小的值

因此狀態轉移方程為:dp[i][j] = min(dp[i][j],dp[i][k] + dp[k][j] + a[k] * a[i] * a[j])(i < k < j)

**:

#include#include#include#include#includeusing namespace std;

const int maxn = 150;

const int inf = 1 << 30;

int dp[maxn][maxn];

int main()

printf("%d\n",dp[1][n]);

}return 0;

}

最優矩陣鏈乘

問題描述 乙個n m矩陣由n行m列共n m個數排列而成。兩個矩陣a和b可以相乘當且僅當a的列數等於b的行數。乙個n m的矩陣乘以乙個m p的矩陣等於乙個n p的矩陣,運算量為nmp。矩陣乘法滿足結合律,a b c可以表示成 a b c或者是a b c 兩者的運算量卻不同。例如當a 2 3 b 3 4...

矩陣鏈乘問題

問題描述 給定n個矩陣的鏈 a2,an 矩陣 a i 的規模為 p i pi 1 1 i n 求完全括號化的方案,使得計算乘積 a 1,a2 an 所需標量乘法的次數最少。遞推式 m i,j if i jif i include include include using namespace std...

最優矩陣鏈乘

題目大意 乙個n m矩陣由n行m列共n m個數排列而成。兩個矩陣a和b可以相乘當且僅當a的列數等於b的行數。乙個n m的矩陣乘以乙個m p的矩陣等於乙個n p的矩陣,運算量為nmp。矩陣乘法滿足結合律,a b c可以表示成 a b c或者是a b c 兩者的運算量卻不同。例如當a 2 3 b 3 4...