Pagini recente » Cod sursa (job #290255) | Cod sursa (job #805982) | Cod sursa (job #2423842) | Cod sursa (job #2796206) | Cod sursa (job #2581480)
#include <iostream>
#include <bits/stdc++.h>
#include <vector>
using namespace std;
const unsigned long long kInf = numeric_limits<unsigned long long>::max();
class Task {
public:
void solve () {
read_input();
print_output(get_result());
}
private:
int n;
vector<int> v;
void read_input() {
ifstream fin ("podm.in");
fin>>n;
int aux;
//v.push_back(-1); //v[0]; element fictiv
for (int i = 0; i <= n; i++) {
fin>>aux;
v.push_back(aux);
}
fin.close();
}
unsigned long long get_result () {
vector<vector<unsigned long long>> dp (n+1, vector<unsigned long long> (n+1, kInf));
for (int i = 1; i <=n ; i++) {
dp[i][i] = 0ULL;
}
for (int i = 1; i < n; i++) {
dp[i][i+1] = 1ULL * v[i-1] * v[i] * v[i+1];
}
for (int len =2; len <= n; ++len) {
for (int i = 1; i + len - 1 <= n; ++i) {
int j = i + len - 1;
for (int k = i; k < j; k++) {
unsigned long long aux = dp[i][k] + dp[k+1][j] + 1ULL * v[i-1] * v[k] * v[j];
dp[i][j] = min (aux, dp[i][j]);
}
}
}
return dp[1][n];
}
void print_output (unsigned long long result) {
ofstream fout ("podm.out");
fout<<result;
fout.close();
}
};
int main() {
Task * task = new Task();
task -> solve();
delete task;
return 0;
}