动态规划之矩阵链乘法。。。
#include <iostream>
using namespace std;
int columns[] = {30, 35, 15, 5, 10, 20, 25};
const int size = sizeof columns / sizeof *columns;
int m[size][size];
int s[size][size];
void getChainOrder(int *columns, int size)
{
if (columns == NULL || size <= 0)
return;
for (int i = 1; i <= size; i++)
m[i][i] = 0;
for (int l = 2; l <= size; l++)
{
for (int i = 1; i <= size - l + 1; i++)
{
int j = i + l - 1;
m[i][j] = 65535;
for (int k = i; k <= j; k++)
{
int q = m[i][k] + m[k + 1][j] + columns[i - 1] * columns[k] * columns[j];
if (q < m[i][j])
{
m[i][j] = q;
s[i][j] = k;
}
}
}
}
}
void print()
{
for (int i = 1; i <= size - 1; i++)
{
for (int j = 1; j <= size - 1; j++)
cout << m[i][j] << '\t';
cout << endl;
}
}
void printResult(int i = 1, int j = size)
{
if (i == j)
cout << "A" << i;
else
{
cout << "(";
printResult(i, s[i][j]);
printResult(s[i][j] + 1, j);
cout << ")";
}
}
void main()
{
cout << "size = " << size << endl;
getChainOrder(columns, size);
print();
cout << "m[0][5] = " << m[1][6] << endl;
printResult();
}
1499

被折叠的 条评论
为什么被折叠?



