1、备忘录是动态规划算法的变形. 备忘录方法也是用表格保存已解决子问题的答案.与动态规划算法不同的是, 备忘录方法的递归方式是 自顶向下 的, 而动态规划算法则是 自底向上 递归的. 因此, 备忘录方法的控制结构与直接递归方法的控制结构相同, 而区别在于备忘录方法为每个解过的子问题建立了备忘录以备需要时查看, 避免了相同子问题的重复求解.备忘录方法为每个子问题建立一个记录项, 并初始化为一个特殊值表示该子问题尚未求解. 在求解过程中, 对每个待求的子问题, 首先查看其相应的记录项. 如若记录项仍为初始化时的特殊值, 则表示该子问题尚未求解, 于是对其求解; 如若记录项非特殊值 , 则表示该子问题已
2、求解, 直接取值即可.#include #include #define N 100 using namespace std; int mN+1N+1 = 0, sN+1N+1 = 0, pN+2 = 0;/ 数组 m 用于记录子问题的解, 数组 s 用于记录最佳分割点, 数组 p 用于记录矩阵行列数. int LookUpdMatrixChain(int i, int j) if(mij) return mij; if(i = j) return 0; mij = LookUpdMatrixChain (i + 1, j) + pi - 1*pi*pj; sij = i; for (int k = i + 1; k n; for (int i = 0; i pi; coutn“ 个矩阵相乘最少需要计算 “LookUpdMatrixChain (1, n)“ 次乘法.“endlendl; cout“矩阵相乘顺序: “endlendl; Traceback (1, n); return 0; 输入样例:310 100 5 50输出:3 个矩阵相乘最少需要计算 7500 次乘法.矩阵相乘顺序:Multiply A 1, 1 and A 2, 2Multiply A 1, 2 and A 3, 3