#include <iostream>
#include <cstring>
using namespace std;
int w[1000], q[1000][1000];
int r[500][500];
int course(int i, int j)
{
int x, t;
int k;
if(r[i][j]>=0)
return r[i][j];
if(i == j)
return 0;
if(i == j-1)
{
q[i][i+1] = i;
r[i][j] = w[i] * w[i+1] * w[i+2];
return r[i][j];
}
x = course(i, i) + course(i+1, j) + w[i] * w[i+1] * w[j+1];
q[i][j]=i;
for(k = i+1; k<j; k++)
{
t = course(i,k)+course(k+1,j)+w[i]*w[k+1]*w[j+1];
if(t < x)
{
x = t;
q[i][j] = k;
}
}
r[i][j] = x;
return x;
}
int main()
{
int n, i, j, tmp;
while(cin >> n && n!=0)
{
int flag = 1;
memset(w,0,sizeof(w));
memset(q,0,sizeof(q));
memset(r,0,sizeof(r));
for(i = 1; i <= n; i++)
{
cin >> w[i];
if(i > 1)
{
if(w[i] != tmp)
{
flag = 0;
}
}
cin >> tmp;
}
w[i] = tmp;//将矩阵的行列数量化成一列表达
for(i = 1; i<= n; i++)
{
for(j = 1; j <= n; j++)
{
r[i][j] = -1;
}
}
if(flag)
cout << course(1, n) << endl;
else
cout << "invalid argument" << endl;
}
return 0;
}
使用动态规划算法就能解决,给大家期末应个急,当时我也想了挺久的。
如果不知道动态规划怎么写,去bilibili找吧,挺详细的