Pagini recente » Cod sursa (job #2348708) | Cod sursa (job #1044582) | Cod sursa (job #2098677) | Cod sursa (job #1917894) | Cod sursa (job #2831643)
#include <bits/stdc++.h>
using namespace std;
ifstream in("podm.in");
ofstream out("podm.out");
typedef long long i64;
i64 d[505],n;
i64 m[505][505];
int main()
{
in >> n;
for (int i = 0; i <= n; i++)
in >> d[i];
for (int l = 0; l < n; l++)
{
for (int i = 1; i <= n - l; i++)
{
if (l == 0)
m[i][i] = 0;
else if (l == 1)
m[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
else
{
i64 minim = 1e18;
for (int j = i; j < i + l; j++)
{
i64 prod = m[i][j] + m[j + 1][i + l] + d[i - 1] * d[j] * d[i + l];
if (prod < minim)
minim = prod;
}
m[i][i + l] = minim;
}
}
}
out << m[1][n];
return 0;
}
///la pentru fiecare i si l,caut minimul pentru a inmulti matricele i si i+l
///solutiile sunt diferite pentru toate j, i+l>j>i, descompunand produsul matriceal in inultirea dintre matricele i...j si j...i+l
///pentru i,j,l solutia este m[i][j] + m[j][i+l]