Cod sursa(job #1767640)

Utilizator BlackNestaAndrei Manaila BlackNesta Data 29 septembrie 2016 15:51:38
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>
#define INF 1LL<<60

using namespace std;

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

void Citire()
{
    ifstream f("podm.in");
    f >> n;
    int i;
    for(i = 0; i <= n; i++)
        f >> a[i];
    f.close();
}

void Rezolvare()
{
    int i, j, k, dif;
    long long minim, x;
    for(i = 1; i < n; i++)
        dp[i][i + 1] = 1LL * a[i - 1] * a[i] * a[i + 1];
    for(dif = 2; dif < n; dif++)
        for(i = 1; i <= n - dif; i++)
        {
            j = i + dif;
            minim = INF;
            for(k = i; k < j; k++)
            {
                x = dp[i][k] + dp[k + 1][j] + 1LL * a[i - 1] * a[k] * a[j];
                minim = min(minim, x);
            }
            dp[i][j] = minim;
        }
    ofstream g("podm.out");
    g << dp[1][n] << "\n";
    g.close();
}

int main()
{
    Citire();
    Rezolvare();
    return 0;
}