Cod sursa(job #2374254)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 7 martie 2019 17:42:00
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <utility>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <iomanip>
#define ll long long
#define lsb(x) (x & -x)

using namespace std;

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

const ll INF = 5e15;

int main() {

    int n;
    in >> n;
    n ++;
    vector<ll> v(n + 1, 0);
    for(int i = 1; i <= n; i ++)
        in >> v[i];

    vector<vector<ll>> dp(n + 1, vector<ll> (n + 1, INF));
    for(int i = 1; i < n; i ++)
        dp[i][i + 1] = 0;

    for(int len = 3; len <= n; len ++) {
        for(int i = 1; i + len - 1 <= n; i ++) {
            int j = i + len - 1;
            for(int m = i + 1; m < j; m ++)
                dp[i][j] = min(dp[i][j], dp[i][m] + dp[m][j] + v[i] * v[j] * v[m]);
        }
    }

    out << dp[1][n];

    return 0;
}