总时间限制:
描述:
有若干个矩阵{Ai},元素都为整数且已知矩阵大小。
如果要计算所有矩阵的乘积A1 * A2 * A3 .. Am,最少要多少次整数乘法?
输入:
第一行一个整数n(n <= 100),表示一共有n-1个矩阵。
第二行n个整数B1, B2, B3... Bn(Bi <= 100),第i个数Bi表示第i个矩阵的行数和第i-1个矩阵的列数。
等价地,可以认为第j个矩阵Aj(1 <= j <= n - 1)的行数为Bj,列数为Bj+1。
输出:
一个整数,表示最少所需的乘法次数
题目分析:
经典的动态规划问题。我分析得显然不会比屈奶奶分析得好。故附上一张ppt:
于是,照这个写出来的代码就是:
int main ()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &P[i]);
for (int d = 0; d < n - 1; d++)
{
for (int i = 0; i + d < n - 1; i++)
{
if (d == 0)
{
m[i][i + d] = 0;
break;
}
int Min = 0x7fffffff;
for (int k = i; k < i + d; k++)
{
int t = m[i][k] + m[k + 1][i + d] + P[i]*P[k+1]*P[i + d + 1];
if (Min > t)
Min = t;
}
m[i][i + d] = Min;
}
}
printf("%d\n",m[0][n - 2]);
return 0;
}