Pagini recente » Cod sursa (job #2106276) | Cod sursa (job #2971112) | Cod sursa (job #1830365) | Cod sursa (job #1123611) | Cod sursa (job #813268)
Cod sursa(job #813268)
#include <fstream>
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
long long n, d[510], cmin[510][510];
void citire();
void pd();
void afisare();
//void afisare_rec(int i, int j);
int minim(int a, int b);
int main()
{
citire();
pd();
afisare();
fout.close();
return 0;
}
void citire()
{
int i;
fin>>n; //citim nr de matrici inmultite
for(i=1;i<=n+1;i++) //citim cele n+1 dimensiuni
fin>>d[i];
}
void pd()
{
int i, j, k, lg, p;
//initializam
for(i=1;i<=n;i++)
cmin[i][i]=0;
for(i=1;i<=n;i++)
{
cmin[i+1][i];
cmin[i][i+1]=d[i]*d[i-1]*d[i+1];
}
for(lg=2;lg<=n-1;lg++) // lungimea secventei
for(i=1;i<=n-lg;i++) // inceputul secventei
{
j=i+lg; // sfarsitul secventei
cmin[i][j]=1000000000;
for(k=i;k<j;k++)
{
/*
p= cmin[i][k] + cmin[k+1][j] + d[i-1]*d[k]*d[j];
if(p<cmin[i][j])
{
cmin[i][j]=p;
cmin[j][i]=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;
return b;
}
void afisare()
{
fout<<cmin[1][n];
fout<<'\n';
//afisare_rec(1,n);
}
/*
void afisare_rec(int i,int j) // afiseaza parantezarea optimala a matricilor de la Ai ... Aj
{
if(i==j)
{
fout<<"A"<<i;
}
if(cmin[i][j]==i)
fout<<"A"<<i;
else
{
fout<<"(";
afisare_rec(cmin[j][i], j);
fout<<")";
}
fout<<"*";
if(cmin[j][i]+1==j)
fout<<"A"<<j;
else
{
fout<<"(";
afisare_rec(cmin[j][i]+1, j);
fout<<")";
}
}*/