Pagini recente » Cod sursa (job #1936559) | Cod sursa (job #2196106) | Cod sursa (job #1294954) | Cod sursa (job #2597879) | Cod sursa (job #2262398)
#include <bits/stdc++.h>
#define MaxN 505
#define ll long long
std::ifstream InFile("podm.in");
std::ofstream OutFile("podm.out");
int N;
ll Dim[MaxN], // Asa cum sunt date in fisierul initial
DP[MaxN][MaxN]; // Pentru matricea M[i] am (Dim[i-1], Dim[i])
void Dyn() {
for (int i=1; i<N; ++i)
DP[i][i+1] = Dim[i-1]*Dim[i]*Dim[i+1];
for (int len=2, i, j; len<=N; ++len) {
for (i=1; i+len-1<=N; ++i) {
DP[i][i+len-1] = DP[i][i] + DP[i+1][i+len-1] + Dim[i-1]*Dim[i]*Dim[i+len-1];
for (j=i+1; j<=i+len-1; ++j)
DP[i][i+len-1] = std::min(DP[i][j] + DP[j+1][i+len-1] + Dim[i-1]*Dim[j]*Dim[i+len-1], DP[i][i+len-1]);
}
}
}
void Citire() {
InFile >> N;
for (int i=0; i<=N; ++i)
InFile >> Dim[i];
}
void Rezolvare() {
Dyn();
OutFile << DP[1][N] << '\n';
}
int main()
{
Citire();
Rezolvare();
return 0;
}