2022年上半年软设算法题代码
- #include
- #define N 100
-
- int cost[N][N];
- int trace[N][N];
-
- int cmm(int n, int seq[]) {
- int tempCost;
- int tempTrace;
- int i, j, k, p;
- int temp;
- for (i = 0; i < n; i ++ ) { cost[i][i] = 0; }
- for (p = 1; p < n; p ++ ) { //距离,i~j的距离,矩阵链乘的距离,矩阵维数序列的距离。
- for (i = 0; i < n - p; i ++) { //遍历以P距离为基础下,起始为i的最优代价
- j = i + p; //设置以j为边界,计算代价,j是用来限定边界的
- tempCost = -1; //给代价赋初值
- for (k = i; k < j; k ++ ) { //遍历k这个这个数直到不超出边界,求出最优计算顺序的划分位置。
- temp = cost[i][k] + cost[k + 1][j] + seq[i] * seq[k + 1] * seq[j + 1]; //这里就像实际运算时一样,先算括号里面的cost[i][k] + cost[k + 1][j](里面还可以推出里面),再加上最外层 seq[i] * seq[k + 1] * seq[j + 1]
- if (tempCost == -1 || tempCost > temp) {
- tempCost = temp;
- tempTrace = k;
- }
- }
- cost[i][j] = tempCost;
- trace[i][j] = tempTrace;
- }
- }
- return cost[0][n - 1];
- }
-
- int main()
- {
- int n = 4;
- int seq[] = {15, 5, 10, 20, 25};
-
- int result = cmm(n, seq);
- printf("%d\n", result);
-
- return 0;
- }