@Yeasion-Nein
2018-10-04T17:00:47.000000Z
字数 903
阅读 706
Note
首先你有M个矩阵大小分别为
,要求你求出这些矩阵乘积的最小次数。
我们设为第L个矩阵和第R个矩阵的乘积所需要的最小的代价。那么我们知道当我们计算的时候我们中间一定有一个断点,然后将整个区间分为和,然后我们相加就是答案之一,然后我们还要计算所有东西相乘所要求的代价,而矩阵的相乘起来的列数和行数也就是最左边的列数和最右边的行数。那么代价就是。那么我们得到了状态转移方程式。
但是要注意代码不可以这么书写:
for(int L = 1; L <= N; L ++)
for(int R = L; R <= N; R ++)
for(int K = L; k <= R; K ++)
F[L][R] = ......
在这种代码里面是从小到大枚举的。那么当你枚举的时候,任何以比大的数为左端点的都没有求出。所以是没有求出的。所以这种求法是错误的。然后我们应该在最外面枚举区间长度,里面枚举端点,在里面枚举。
for(int Len = 2; Len <= N; Len ++)
for(int L = 0, R = L + Len; L <= N, R <= N; L ++, R ++)
for(int K = L; K <= R; K ++)
F[L][R] = ......
你现在有一个
现在有N个点的坐标分别为要求从号点出发了,走完所有的点的最小距离为多少。
我们设表示走过了i这个集合的所有的点并且最后停在j号点的最小距离。换句话说,我们用一个串表示状态,对于每一个点,如果这个串是表示走了,反之没走。那么表示从1走到j并且状态为的最小距离。那么我们就可以实现状态转移了。