Pagini recente » Cod sursa (job #3180374) | Cod sursa (job #2637309) | Cod sursa (job #3179109) | Cod sursa (job #3181068) | Cod sursa (job #3177472)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("podm.in");
ofstream g("podm.out");
const int dim = 505, inf = 1e4 * 5 * 1e2 * 10;
int dimens[dim];
int dp[dim][dim]; /// dp[i][j] = nr MINIM de inm pt sirul de matrici cu indicii i, i + 1, i + 2, ... , j
int main()
{
int n, i, j, k, minim;
f >> n;
for(i = 1; i <= n + 1; i ++)
f >> dimens[i];
for(i = 1; i < n; i ++)
dp[i][i + 1] = dimens[i] * dimens[i + 1] * dimens[i + 2]; /// Formez DP
for(i = 1; i <= n; i ++)
for(j = i + 2; j <= n; j ++)
{
minim = inf;
for(k = i; k < j; k ++)
minim = min(minim, dp[i][k] + dp[k + 1][j] +
dimens[i] * dimens[k + 1] * dimens[j + 1]);
dp[i][j] = minim;
}
/*
g << "Matricea dp[][]: " << '\n';
for(i = 1; i <= n; i ++)
{
for(j = 1; j <= n; j ++)
g << dp[i][j] << '\t';
g << '\n';
}
g << "\nSunt necesare " << dp[1][n] << " inmultiri." << '\n';
*/
g << dp[1][n];
return 0;
}