Pagini recente » Cod sursa (job #872260) | Cod sursa (job #2392356) | Cod sursa (job #208145) | Cod sursa (job #306937) | Cod sursa (job #3346473)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <limits>
using namespace std;
int main(void)
{
std::ios::sync_with_stdio(false);
ifstream in("podm.in");
ofstream out("podm.out");
vector<vector<int>> m(505, vector<int>(3, 0));
vector<vector<long>> dp(505, vector<long>(505, 0));
int n;
in >> n >> m[1][0];
for (int i = 1; i <= n; ++i) {
in >> m[i][1];
m[i + 1][0] = m[i][1];
}
// for (int i = 1; i <= n; i++) {
// cout << m[i][0] << " " << m[i][1]<< endl;
// }
// for (int j = 1; j <= n; ++j) {
// for (int k = 1; k < n; ++k) {
// for (int i = 1; i <= n - k; ++i) {
// if (i < j) {
// long a = dp[i][j - 1] + m[i][0] * m[j - 1][1] * m[j][1];
// long b = dp[i + 1][j] + m[i + 1][0] * m[j][1] * m[i][0];
// dp[i][j] = min(a, b);
// }
// }
// }
// }
for (int i = 1; i < n; i++) {
for (int j = 1; j <= n - i; j++) {
if (i == 1) {
dp[j][j + i] = m[j][0] * m[j][1] * m[j + i][1];
} else if (i > 1) {
dp[j][j + i] = numeric_limits<long>::max();
for (int k = j; k < j + i; k++) {
long a = dp[j][k] + dp[k + 1][j + i] + m[j][0] * m[k][1] * m[j + 1][1];
dp[j][j + i] = min(dp[j][j + i], a);
}
}
}
}
// for (int i = 0; i <= n; i++) {
// for (int j = 0; j <= n; j++) {
// cout << dp[i][j] << " ";
// }
// cout << endl;
// }
out << dp[1][n];
in.close();
out.close();
return 0;
}