Cod sursa(job #654991)

Utilizator slycerdan dragomir slycer Data 31 decembrie 2011 15:34:47
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
/* 
 * File:   Parantezareoptimadematrici.cpp
 * Author: slycer
 *
 * Created on December 31, 2011, 2:41 PM
 */

#include <cstdlib>
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {
    ifstream input("podm.in");
    ofstream output("podm.out");
    int n;
    int * data;
    int ** dp;
    input >> n;
    data = new int[n + 1];
    dp = new int * [n];
    for (int i = 0; i < n; i++) {
        dp[i] = new int[n];
    }

    for (int i = 0; i <= n; i++) {
        input >> data[i];
    }
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < n - i; j++) {
            int linie = j;
            int coloana = j + i;
            dp[linie][coloana] = 1<<30;
            if (i == 1) {
                dp[linie][coloana] = data[linie] * data[linie + 1] * data[linie + 2];
                dp[coloana][coloana]=0;
            }

            for (int k = linie; k < coloana; k++) {

                dp[linie][coloana] = min(dp[linie][coloana],
                        dp[linie][k] + dp[k+1][coloana] + data[linie] * data[k + 1] * data[coloana + 1]
                        );

            }
            cout << linie << " " << coloana << " " << dp[linie][coloana] << endl;
        }
    }
    output << dp[0][n - 1];
    return 0;
}