Pagini recente » Cod sursa (job #404737) | Cod sursa (job #1495189) | Cod sursa (job #1151549) | Cod sursa (job #2944868) | Cod sursa (job #1323979)
/*
Keep It Simple!
*/
#include <fstream>
#define minV(a,b) ((a)<(b)?(a):(b))
using namespace std;
const int kMax_N = 505;
const int inf = 1 << 28;
long long d[kMax_N], dp[kMax_N][kMax_N];
int n;
void ReadData()
{
ifstream fin("podm.in");
fin >> n;
for (int i = 0; i <= n; ++i)
fin >> d[i];
fin.close();
}
void PrintResult()
{
ofstream fout("podm.out");
fout << dp[1][n];
fout.close();
}
void Initialize()
{
for (int i = 1; i <= n; ++i)
{
for (int j = i; j <= n; ++j)
dp[i][j] = inf;
dp[i][i] = 0;
}
}
void Solve()
{
ReadData();
Initialize();
for (int i = 1; i < n; i++)
dp[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
for (int diag = 2; diag < n; ++diag)
for (int i = 1; i + diag <= n; ++i)
for (int k = i; k < i + diag; ++k)
dp[i][i + diag] = minV(dp[i][i + diag], dp[i][k] + dp[k + 1][i + diag] + d[i - 1] * d[k] * d[i + diag]);
PrintResult();
}
int main()
{
Solve();
return 0;
}