Pagini recente » Cod sursa (job #3256879) | Cod sursa (job #2569879) | Cod sursa (job #402143) | Cod sursa (job #2217027) | Cod sursa (job #1429545)
#include<iostream>
#include<algorithm>
#include<fstream>
#include<vector>
#include<limits>
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
int N;
vector<pair<int, int>> m;
long long d[1000][1000];
int podm()
{
for (int i = 0; i <= N + 1; i++) {
for (int j = 0; j <= N + 1; j++) {
d[i][j] = numeric_limits<long long>::max() / 3;
}
}
d[0][0] = 0;
for (int i = 1; i < N; i++) {
pair<int, int> m1, m2;
m1 = m[i - 1];
m2 = m[i];
d[i - 1][i] = m1.first * m1.second * m2.second;
d[i][i] = 0;
}
for (int i = 0; i < N; i++) {
for (int j = 1; j < N; j++) {
if (i + j < N) {
int x = numeric_limits<long long>::max();
for (int k = i; k < i + j; k++) {
pair<int, int> m1, m2, m3, m4;
m1 = m[i + j];
m2 = m[i];
m3 = m[k];
long long y = d[i][k] + d[k + 1][i + j] + m2.first * m1.second * m3.second;
if (y < d[i][i + j]) {
d[i][i + j] = y;
}
}
}
}
}
return d[0][N - 1];
}
int main()
{
fin >> N;
int x, y;
fin >> x;
for (int i = 0;i < N; i++) {
fin >> y;
m.push_back(make_pair(x, y));
x = y;
}
fout << podm() << endl;
}