Pagini recente » Cod sursa (job #3343576) | Cod sursa (job #501958) | Monitorul de evaluare | Cod sursa (job #726532) | Cod sursa (job #3339985)
#include <fstream>
#include <climits>
#define ll long long
int main()
{
short n;
std::ifstream in("podm.in");
in >> n;
short *t = new short[n + 2];
ll **dp = new ll *[n + 1];
for (int i = 0; i <= n; i++)
{
dp[i] = new ll[n + 1];
for (int j = 0; j <= n; j++)
dp[i][j] = (i == j) ? 0 : LLONG_MAX;
}
for (short i = 1; i <= n + 1; i++)
in >> t[i];
in.close();
for (int i = n; i >= 1; i--)
{
for (int j = i + 1; j <= n; j++)
{
for (int k = i; k < j; k++)
{
dp[i][j] = std::min(dp[i][j], dp[i][k] + dp[k + 1][j] + (ll)t[i] * t[k + 1] * t[j + 1]);
}
}
}
std::ofstream out("podm.out");
out << dp[1][n];
out.close();
for (int i = 0; i <= n; i++)
delete[] dp[i];
delete[] dp;
delete[] t;
return 0;
}