链接网址:http://tyvj.cn/Problem_Show.asp?id=1055
#include<iostream>
#include<cstring>
using namespace std;
const int MAX = 1005;
const int INF = 0x7fffffff;
int p[MAX],m[MAX][MAX],dp[MAX][MAX];
int n;//矩阵个数
void matrixChain(){
for(int r=2;r<=n;r++)//对角线循环
for(int i=1;i<=n-r+1;i++){//行循环
int j = r+i-1; //列的坐标
m[i][j]=m[i][j-1]+p[j];//计算i合并到j的值
dp[i][j]=INF;
for(int k = i;k<j;k++)
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+m[i][j]);
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{ cin>>p[i]; m[i][i]=p[i];}
matrixChain();
cout<<dp[1][n]<<endl;
system("pause");
return 0;
}