Pagini recente » Cod sursa (job #1182896) | Cod sursa (job #938605) | Cod sursa (job #2231395) | Cod sursa (job #1439310) | Cod sursa (job #2312899)
#include <iostream>
#include <algorithm>
#include <vector>
#include <fstream>
#define NMAX 501
using namespace std;
ifstream in("podm.in");
ofstream out("podm.out");
int DP[NMAX][NMAX], n;
vector<int> dim;
void read(){
in >> n;
int 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(int i = 1; i < n; i++){
DP[i][i+1] = dim[i-1]*dim[i]*dim[i+1];
}
for(int d = 2; d <= n-1; d++){ // for each diag
for(int i = 1; i <= n-d; i++){ // for each matrix
int minn = DP[i][i] + DP[i+1][i+d] + dim[i-1]*dim[i]*dim[i+d];
int pos = i;
for(int k = i+1; k < i + d; k++){
int 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;
}