Pagini recente » Cod sursa (job #2776531) | Cod sursa (job #1021734) | Cod sursa (job #72708) | Cod sursa (job #430234) | Cod sursa (job #1074165)
using namespace std;
#include<cstdio>
#include<utility>
const int MAXN=510;
long long dp[MAXN][MAXN];
pair<long long,long long> ds[MAXN][MAXN];
int main(){
freopen("podm.in","r",stdin);
freopen("podm.out","w",stdout);
int n;
long long d[MAXN];
scanf("%d",&n);
for(int i=0;i<=n;i++){
scanf("%I64d",&d[i]);
}
for(int i=1;i<=n;i++){
ds[i][i].first=d[i-1];
ds[i][i].second=d[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
dp[i][j]=1LL<<60;
}
}
for(int i=1;i<=n;i++){
dp[i][i]=0;
}
for(int l=1;l<n;l++){
for(int i=1;i+l<=n;i++){
for(int t=i;t<i+l;t++){
int sum;
sum=dp[i][t]+dp[t+1][i+l]+
ds[i][t].first*ds[i][t].second*ds[t+1][i+l].second;
if(sum<dp[i][i+l]){
dp[i][i+l]=sum;
ds[i][i+l].first=ds[i][t].first;
ds[i][i+l].second=ds[t+1][i+l].second;
}
}
}
}
printf("%I64d",dp[1][n]);
return 0;
}