Cod sursa(job #1307503)

Utilizator gabrieligabrieli gabrieli Data 2 ianuarie 2015 14:00:47
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <cstdint>
#include <algorithm>
#include <fstream>
#include <vector>
#include <limits>
using namespace std;

int main() {
    ifstream fin("podm.in");
    ofstream fout("podm.out");
    
    const uint64_t INF = numeric_limits<uint64_t>::max();
    int n; fin >> n;
    
    vector<uint64_t> S(n+1);
    for (int i = 0; i <= n; ++i)
        fin >> S[i];
    
    vector<vector<uint64_t>> dp(n, vector<uint64_t>(n, INF));
    for (int i = 0; i < n; ++i) dp[i][i] = 0;
    
    for (int i = n-1; i >= 0; --i)
        for (int j = i+1; j < n; ++j)
            for (int k = i; k < j; ++k)
                dp[i][j] = min(dp[i][j],
                    dp[i][k] + dp[k+1][j] + S[i]*S[k+1]*S[j+1]);
    
    fout << dp[0][n-1] << endl;
    
    return 0;
}