可以用递归,就是速度慢些,也可以直接把递归改成自顶向下的动归,或者直接用自底向上的动归,都可以,不过这里只是为了计算14年阿里笔试的一道题,所以就直接写了个递归版本的。
代码:
#include<iostream>
using namespace std;
int fun(int *A,int lo,int hi)
{
if(lo==hi)
return 0;
int q=INT_MAX;
for(int i=lo;i<hi;i++)
q=min(q,fun(A,lo,i)+fun(A,i+1,hi)+A[lo-1]*A[i]*A[hi]);
return q;
}
int main()
{
int A[7]={5,10,3,8,5,20,6};
int k=fun(A,1,6);
cout<<k<<endl;
system("pause");
return 0;
}