Cod sursa(job #2260248)

Utilizator pinteastefanPintea Teodor Stefan pinteastefan Data 14 octombrie 2018 17:51:52
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;

long long dp[501][501], values[501], n;

int main() {
    ifstream f("podm.in");
    ofstream g("podm.out");
    f >> n;
    for (int i = 0; i <= n; ++i){
        f >> values[i];
    }

    for (int i = 1; i <= n; i++){
        for (int j = 1; j <= n; ++j){
            dp[i][j] = (1LL << 60);
        }
    }

    for (int i = 1; i <= n; i++){
        dp[i][i] = 0;
    }

    for (int i = 1; i  <= n - 1; i++){
        dp[i][i + 1] = values[i - 1] * values[i] * values[i + 1];
    }

    for (int k = 2; k < n; ++k){
        for (int i = 1; i <= n - k; ++i){
            int j = i + k;
            for (int p = i; p < j; ++p){
                dp[i][j] = min(dp[i][j], dp[i][p] + dp[p + 1][j] + values[i - 1] * values[p] * values[j]);
            }
        }
    }
    g << dp[1][n];
    return 0;
}