算法导论 · 动态规划 · 链式矩阵乘法

  • 源代码
#include <cstdio>
#include <cstring>
#define maxn 101
#define minc(a, b) (a) > (b) ? (b) : (a)
#define INF 1 << 29

int c[maxn][maxn], m[maxn];
int n;

int main() { 
	memset(c, 0, sizeof(c));
	freopen("8.chainMatrixMultiplication.txt", "r", stdin);
	scanf("%d", &n);
	for(int i = 0; i <= n; i++) {
		scanf("%d", &m[i]);
	}

	for(int l = 2; l <= n; l++) {
		for(int i = 0; i < n-l + 1; i++) {
			int j = i + l - 1;
			c[i][j] = INF;
			for(int k = i; k < j; k++) {
				int q = c[i][k] + c[k+1][j] + m[i] * m[k+1] * m[j+1];
				if(q < c[i][j]) {
					c[i][j] = q;
				}
			}
		}
	}

	for(int i = 0; i < n; i++) {
		for(int j = 0; j < n; j++) {
			printf("%-4d  ", c[i][j]);
		}
		printf("\n");
	}
	
	printf("%d", c[0][n-1]);
	return 0;
}
  • 输入数据
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述
发布了77 篇原创文章 · 获赞 40 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/y_dd6011/article/details/97434934