Pagini recente » Cod sursa (job #3254985) | Cod sursa (job #129065) | Cod sursa (job #2285532) | Cod sursa (job #1257489) | Cod sursa (job #1631284)
#include <fstream>
#define INF 500000000000000;
using namespace std;
ifstream cin ("podm.in");
ofstream cout ("podm.out");
int mat_size[505], n;
long long dp[505][505];
long long min(long long a, long long b) {
if(a <= b) {
return a;
}
return b;
}
int main() {
cin >> n;
for(int i = 0; i <= n; ++i) {
cin >> mat_size[i];
}
for(int i = 1; i <= n; ++i) {
for(int j = i + 1; j <= n; ++j) {
dp[i][j] = INF;
}
}
for(int i = 1; i <= n; ++i) {
dp[i][i] = 0;
dp[i][i + 1] = (long long) mat_size[i - 1] * mat_size[i] * mat_size[i + 1];
}
for(int i = 1; i < n; ++i) {
for(int j = i + 2; j <= n; ++j) {
for(int k = i; k < j; ++k) {
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + (long long) mat_size[i - 1] * mat_size[k] * mat_size[j]);
}
}
}
for(int i = 1; i <= n; ++i) {
for(int j = 1; j <= n; ++j) {
cout << dp[i][j] << ' ';
}
cout << '\n';
}
cout << dp[1][n] << '\n';
return 0;
}