Pagini recente » Cod sursa (job #2503497) | Cod sursa (job #1313166) | Cod sursa (job #2982937) | Cod sursa (job #2310717) | Cod sursa (job #1593603)
#include <stdio.h>
#include <algorithm>
using namespace std;
typedef long long int ll;
int n;
int t[1<<9];
ll dp[1<<9][1<<9];
/// dp[i][j] numarul minim de operatii necesare pentru a obtine [i,j]
ll memo(int x,int y)
{
if (dp[x][y]!=1e18) return dp[x][y];
for (int i=x;i<y;i++)
dp[x][y]=min(dp[x][y],memo(x,i)+memo(i+1,y)+1LL*t[i]*t[x-1]*t[y]);
return dp[x][y];
}
int main()
{
freopen("podm.in","r",stdin);
freopen("podm.out","w",stdout);
scanf("%d",&n);
for (int i=0;i<=n;i++) scanf("%d",&t[i]);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
dp[i][j]=1e18;
for (int i=1;i<=n;i++) dp[i][i]=0;
for (int i=1;i<n;i++) dp[i][i+1]=1LL*t[i]*t[i+1]*t[i-1];
printf("%d",memo(1,n));
return 0;
}