Pagini recente » Cod sursa (job #2254613) | Cod sursa (job #1398837) | Cod sursa (job #1490777) | Cod sursa (job #1199215) | Cod sursa (job #1059214)
#include <iostream>
#include <fstream>
const static int NMAX = 510;
const static long long INFINIT = (1LL << 62);
using namespace std;
ifstream input("podm.in");
ofstream output("podm.out");
long long dimensiuni[NMAX];
long long dp[NMAX][NMAX];
int N;
int main()
{
input >> N;
for (int i = 0; i <= N ; i++)
{
input >> dimensiuni[i];
for (int j = 0; j <= N ; j++)
{
dp[i][j] = INFINIT;
}
}
input.close();
for (int i = 1; i <= N - 1 ; i++)
{
dp[i][i] = 0;
dp[i][i+1] = dimensiuni[i - 1] * dimensiuni[i] * dimensiuni[i + 1];
}
dp[N][N] = 0;
for (int l = 1 ; l <= N ; l++)
for (int i = 1 ; i <= N - l; i++)
{
int j = l + i;
for (int k = i ; k <= j - 1 ; k++)
{
dp[i][j] = min(dp[i][j] , dp[i][k] + dp[k + 1][j] + dimensiuni[i - 1] * dimensiuni[k] * dimensiuni[j]);
}
}
output << dp[1][N];
return 0;
}