Pagini recente » Cod sursa (job #484383) | Cod sursa (job #2549274) | Cod sursa (job #2796300) | Cod sursa (job #2718621) | Cod sursa (job #917753)
Cod sursa(job #917753)
#include <iostream>
#include <fstream>
#define INF 200000000000000LL
using namespace std;
int n;
long long d[505];
long long best[505][505];
/**
d[i-1][i] = dimensiunile matricei i
best[i][j] = numarul minim de inmultiri necesare pentru a inmulti matricele de la i la j
solutie best[1][n];
best[i][j] = min (best[i][j], best[i][k] + best[k+1][j] + d[i-1]*d[k]*d[j]);
*/
inline long long Min (long long a, long long b)
{
if (a<b)
return a;
return b;
}
int main()
{
ifstream f ("podm.in");
f>>n;
int i, j, k, dg;
for (i=0; i<=n; i++)
f>>d[i];
f.close();
for (i=1; i<n; i++)
best[i][i+1] = d[i-1]*d[i]*d[i+1];
for (dg=2; dg<=n; dg++)
{
for (i = 1, j=dg; j<=n && i<=n; j++, i++)
{
if(best[i][j] == 0)
best[i][j] = INF;
for (k=i; k<j; k++)
best[i][j] = Min (best[i][j], best[i][k] + best[k+1][j] + 1LL*d[i-1]*d[k]*d[j]);
}
}
ofstream g("podm.out");
g<<best[1][n]<<"\n";
g.close();
return 0;
}