记录编号 |
241053 |
评测结果 |
AAAAA |
题目名称 |
最优矩阵链乘 |
最终得分 |
100 |
用户昵称 |
liu_runda |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2016-03-24 12:25:25 |
内存使用 |
0.33 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
int r[105];
int f[105][105];//f[i][j]:从i乘到j的最小花费
int min(int a,int b){
return a<b?a:b;
}
int main(){
freopen("goodmatrix.in","r",stdin);
freopen("goodmatrix.out","w",stdout);
int n;scanf("%d",&n);
n++;
for(int i=1;i<=n;++i)scanf("%d",r+i);
n--;
memset(f,127,sizeof(f));
for(int i=1;i<=n;++i){
f[i][i]=0;
}
for(int i=1;i<=n;++i){
f[i][i+1]=r[i]*r[i+1]*r[i+2];
}
for(int k=2;k<n;++k){//枚举 区间长-1
for(int i=1;i+k<=n;++i){//i+k为区间终点
int j=i+k;
for(int p=i;p<j;++p){
/// printf("f[%d][%d]=min(f[%d][%d],%d+%d+%d*%d*%d\n",\
/// i,j,i,j,f[i][p],f[p+1][j],r[i],r[p+1],r[j+1]);
f[i][j]=min(f[i][j],f[i][p]+f[p+1][j]+r[i]*r[p+1]*r[j+1]);
}
}
}
printf("%d",f[1][n]);
fclose(stdin);fclose(stdout);
return 0;
}