Cod sursa(job #1631284)

Utilizator BrandonChris Luntraru Brandon Data 5 martie 2016 14:28:33
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>

#define INF 500000000000000;

using namespace std;

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

int mat_size[505], n;
long long dp[505][505];

long long min(long long a, long long b) {
    if(a <= b) {
        return a;
    }

    return b;
}

int main() {
    cin >> n;

    for(int i = 0; i <= n; ++i) {
        cin >> mat_size[i];
    }

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

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

    for(int i = 1; i < n; ++i) {
        for(int j = i + 2; j <= n; ++j) {
            for(int k = i; k < j; ++k) {
                dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + (long long) mat_size[i - 1] * mat_size[k] * mat_size[j]);
            }
        }
    }

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

        cout << '\n';
    }

    cout << dp[1][n] << '\n';
    return 0;
}