Cod sursa(job #1429545)

Utilizator alexandru.jercaianuJercaianu Alexandru alexandru.jercaianu Data 6 mai 2015 17:14:35
Problema Parantezare optima de matrici Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include<iostream>
#include<algorithm>
#include<fstream>
#include<vector>
#include<limits>
using namespace std;

ifstream fin("podm.in");
ofstream fout("podm.out");

int N;
vector<pair<int, int>> m;
long long d[1000][1000];

int podm() 
{
    for (int i = 0; i <= N + 1; i++) {
        for (int j = 0; j <= N + 1; j++) {
            d[i][j] = numeric_limits<long long>::max() / 3; 
        }
    }
    d[0][0] = 0;
    for (int i = 1; i < N; i++) {
        pair<int, int> m1, m2; 
        m1 = m[i - 1];
        m2 = m[i];
        d[i - 1][i] = m1.first * m1.second * m2.second; 
        d[i][i] = 0;
    }

    for (int i = 0; i < N; i++) {
        for (int j = 1; j < N; j++) {
            if (i + j < N) {
                int x = numeric_limits<long long>::max();
                for (int k = i; k < i + j; k++) {
                    pair<int, int> m1, m2, m3, m4;
                    m1 = m[i + j];
                    m2 = m[i];
                    m3 = m[k];
                    long long y = d[i][k] + d[k + 1][i + j] + m2.first * m1.second * m3.second;
                    if (y < d[i][i + j]) {
                        d[i][i + j] = y;
                    }
                }
            }
        }
    }
    return d[0][N - 1];
}

int main()
{
    fin >> N;
    int x, y;
    fin >> x;
    for (int i = 0;i < N; i++)  {
        fin >> y;
        m.push_back(make_pair(x, y));
        x = y;
    }
    fout << podm() << endl;

}