Pagini recente » Cod sursa (job #343925) | Cod sursa (job #3176389) | Cod sursa (job #1212862) | Cod sursa (job #3238507) | Cod sursa (job #2312903)
#include <iostream>
#include <algorithm>
#include <vector>
#include <fstream>
#define NMAX 501
using namespace std;
ifstream in("podm.in");
ofstream out("podm.out");
long long int DP[NMAX][NMAX], n;
vector<long long int> dim;
void read(){
in >> n;
long long nr;
while(in >> nr){
dim.push_back(nr);
}
}
void print() {
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n;j ++){
cout << DP[i][j] << '\t';
}
cout << '\n';
}
}
void solve(){
for(long long int i = 1; i < n; i++){
DP[i][i+1] = dim[i-1]*dim[i]*dim[i+1];
}
for(long long d = 2; d <= n-1; d++){ // for each diag
for(long long i = 1; i <= n-d; i++){ // for each matrix
long long int minn = DP[i][i] + DP[i+1][i+d] + dim[i-1]*dim[i]*dim[i+d];
int pos = i;
for(long long int k = i+1; k < i + d; k++){
long long value = DP[i][k] + DP[k+1][i+d] + dim[i-1]*dim[k]*dim[i+d];
if(value < minn){
minn = value;
pos = k;
}
}
DP[i][i+d] = minn;
DP[i+d][i] = pos;
}
}
//Kprint();
out << DP[1][n];
}
int main() {
read();
solve();
return 0;
}