Cod sursa(job #2250745)

Utilizator vladm98Munteanu Vlad vladm98 Data 30 septembrie 2018 17:13:43
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

long long dp[501][501];
long long v[501];

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

    int n;
    fin >> n;
    for (int i = 1; i <= n + 1; ++i) {
        fin >> v[i];
    }

    for (int size = 2; size <= n; ++size) {
        for (int start = 1; start + size - 1 <= n; ++start) {
            dp[size][start] = 1000000000000000000LL;
            int finish = start + size - 1;
            if (size == 2) {
                dp[size][start] = v[start] * v[finish] * v[finish + 1];
                continue;
            }
            for (int midterm = start + 1; midterm <= finish; ++midterm) {
                dp[size][start] = min (dp[size][start], dp[midterm - start][start] + dp[finish - midterm + 1][midterm] + v[start] * v[midterm] * v[finish + 1]);
            }
        }
    }
    fout << dp[n][1];
    return 0;
}