Pagini recente » Cod sursa (job #1359513) | Cod sursa (job #1866498) | Cod sursa (job #248543) | Cod sursa (job #770114) | Cod sursa (job #640614)
Cod sursa(job #640614)
#include<fstream>
using namespace std;
int n,d[505];
long long best[505][505];
//matricea i are dimensiunile d[i-1]*d[i]
//best[i][j]=nr minim de operatii de inmultire a matricelor i,i+1,...,j
void Citire()
{
int i;
ifstream fin("podm.in");
fin>>n;
for(i=0;i<=n;i++)
fin>>d[i];
fin.close();
}
inline long long Min(long long a,long long b)
{
if(a<b)
return a;
return b;
}
void Rezolvare()
{
int i,j,dg,k;
for(i=1;i<=n;i++)
best[i][i]=0;
for(dg=2;dg<=n;dg++)
{
for(i=1,j=dg;i<=n && j<=n;i++,j++)
{
best[i][j]=2000000000;
for(k=i;k<j;k++)
{
best[i][j]=Min(best[i][j],best[i][k]+best[k+1][j]+d[i-1]*d[k]*d[j]);
}
}
}
}
void Afisare()
{
ofstream fout("podm.out");
fout<<best[1][n]<<"\n";
fout.close();
}
int main()
{
Citire();
Rezolvare();
Afisare();
return 0;
}