Pagini recente » Cod sursa (job #1961622) | Cod sursa (job #1230100) | Cod sursa (job #2428294) | Cod sursa (job #443950) | Cod sursa (job #3346850)
#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
class Podm {
private:
vector<long long> d;
int n;
string input_file, output_file;
public:
vector<vector<long long>> dp;
Podm(string input_file, string output_file) {
this->input_file = input_file;
this->output_file = output_file;
}
void read_input() {
ifstream fin(input_file);
if (!(fin >> n)) return;
d.resize(n + 1);
for (int i = 0; i <= n; i++) {
fin >> d[i];
}
dp.resize(n + 1);
for (int i = 0; i <= n; i++) {
dp[i].resize(n + 1, -1);
}
fin.close();
}
long long solve_dp() {
for (int i = 1; i <= n; i++) {
dp[i][i] = 0;
}
for (int i = 1; i < n; i++) {
dp[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
}
for (int len = 3; len <= n; len++) {
for (int i = 1; i <= n - len + 1; i++) {
int j = i + len - 1;
for (int k = i; k < j; k++) {
long long cost = dp[i][k] + dp[k + 1][j] + d[i - 1] * d[k] * d[j];
if (dp[i][j] == -1 || cost < dp[i][j]) {
dp[i][j] = cost;
}
}
}
}
return dp[1][n];
}
void write_output() {
ofstream fout(output_file);
fout << solve_dp() << "\n";
fout.close();
}
};
int main() {
Podm p("podm.in", "podm.out");
p.read_input();
p.write_output();
return 0;
}