简单的阐述一下题意,就是除了左右2端的数外,从中拿走一个数,然后乘以它临近的左右2个数,然后用sum算其总和,(直到最后只剩下左右2端的数)。
用矩阵的乘积来进行模拟即可。
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 101
using namespace std;
int m[N][N];
int p[N];
int main()
{
int t,n,i,j,k,e,r;
cin >> n;
for(i = 0; i < n; ++i)
{
cin >> p[i];
m[i][i] = 0;
}
n = n-1;
for(r = 2; r <= n; ++r)
for(i = 1; i <= n-r+1; ++i)
{
j = i+r-1;
m[i][j] = m[i][i]+m[i+1][j]+p[i-1]*p[i]*p[j];
for(k = i+1; k < j; ++k)
{
t = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
if(t<m[i][j])m[i][j] = t;
}
}
cout << m[1][n]<<endl;
return 0;
}