Pagini recente » Cod sursa (job #153633) | Cod sursa (job #35382) | Cod sursa (job #1399441) | Cod sursa (job #571061) | Cod sursa (job #2305652)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("podm.in");
ofstream out("podm.out");
const int N=505;
const long long INF=999999999999999999;
struct paranteze
{
int first,second,third;
};
paranteze poz[N];
int n,a[N];
long long d[N][N];
int main()
{
int i,j,k;
long long minim;
minim=INF;
in>>n;
for(i=1; i<=n+1; i++)
in>>a[i];
//d[i][j] = produsul min al matricelor de la i la j
//d[i][i] = 0
//d[i][j] = min(d[i][k] + d[k+1][j] + a[i]*a[k+1]*a[j+1]) pt i<=k<j
for(i=n; i>=1; i--)
for(j=1; j<=n; j++)
{
minim=INF;
if(i==j)
d[i][j]=0;
// else if(j==i+1 || i==j+1)
// d[i][j]=a[i]*a[j]*a[j+1];
else
{
for(k=i; k<j; k++)
{
if((d[i][k]+d[k+1][j]+(long long )a[i]*a[k+1]*a[j+1]) < minim)
{
minim = (long long)(d[i][k]+d[k+1][j]+(long long)a[i]*a[k+1]*a[j+1]);
poz[i].first=i;
poz[i].second=k;
poz[i].third=j;
}
}
d[i][j]=minim;
}
}
/*
for(i=1; i<=n; i++)
{
for(j=i; j<=n; j++)
out<<d[i][j]<<" ";
out<<endl;
}
*/
out<<d[1][n];
return 0;
}