Pagini recente » Cod sursa (job #1851259) | Cod sursa (job #553429) | Cod sursa (job #1961208) | Cod sursa (job #1783235) | Cod sursa (job #427187)
Cod sursa(job #427187)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll oo=(ll)1e18;
int n;
ll x[501],f[501][501];
void min(ll &a,ll b){
if (a>b) a=b;
}
ll dp(int a,int b){
if (f[a][b]!=-1) return f[a][b];
ll &res=f[a][b];
res=oo;
for (int i=a;i<b;i++){
ll tmp=x[a]*x[i+1]*x[b+1];
if (tmp<res){
min(res,dp(a,i)+dp(i+1,b)+tmp);
}
}
return res;
}
void open(){
freopen("podm.in","r",stdin);
freopen("podm.out","w",stdout);
}
void get(ll &a){
char c;
while (c=getchar()){
if (c>='0' && c<='9'){
a=(ll)(c-'0');
break;
}
}
while (c=getchar()){
if (c>='0' && c<='9'){
a=(a<<1LL)+(a<<3LL)+(ll)(c-'0');
}
else break;
}
}
int main(){
open();
scanf("%d",&n);
for (int i=0;i<=n;i++) get(x[i]);
for (int i=0;i<n;i++){
for (int j=i;j<n;j++){
if (i==j) f[i][j]=0;
else if (i+1==j) f[i][j]=x[i]*x[i+1]*x[j+1];
else f[i][j]=-1;
}
}
printf("%lld\n",dp(0,n-1));
return 0;
}