Pagini recente » Cod sursa (job #2507534) | Cod sursa (job #609143) | Cod sursa (job #1066383) | Istoria paginii runda/oji2005_c10 | Cod sursa (job #819415)
Cod sursa(job #819415)
#include <fstream>
#define infinit 100000000000000000
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
long long int cmin[508][508],d[508];
//cmin[i][j]=nr min de inmultiri elementare necesare pt a inmulti matricile de la a[i] la a[j]
int n;
void pd();
int minim(int a,int b);
int main()
{
int i;
fin>>n;//citim numarul de matrici
//citim dimensiunile matricelor
for(i=0;i<=n;i++)
fin>>d[i];
pd();
fout<<cmin[1][n];
fout<<'\n';
fout.close();
return 0;
}
void pd()
{
int i,i1,j,k;
//initializare
for(i=1;i<n;i++)
cmin[i][i+1]=d[i-1]*d[i]*d[i+1];
//incepem pd
for(i1=1;i1<n;i1++)
for(i=1;i<=n-i1;i++)
{
j=i1+i;
//calculam cmin[i][j]
cmin[i][j]=infinit;
for(k=i;k<j;k++)
cmin[i][j]=minim(cmin[i][j],cmin[i][k]+cmin[k+1][j]+d[i-1]*d[k]*d[j]);
}
}
int minim(int a,int b)
{
if(a<b)
return a;
else
return b;
}