Cod sursa(job #1289143)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 9 decembrie 2014 16:05:24
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <cstdio>

using namespace std;


/// A[i]* ... * A[j] = A[i]*...*A[k] * A[k+1]*...*a[j]
/// C[i][j] min{c[i][k] + c[k+1][j] + d[i-1] * d[k] * d[j];
/// Se parcurge diagonal deasupra diag. principale

int d[505], c[505][505];
int n;

void calc(int i, int j)
{
    int minim = 0x7fffffff;
    for (int k = i; k < j; k++)
    {
        if (c[i][k] + c[k+1][j] + d[i-1] * d[k] * d[j] < minim)
            minim = c[i][k] + c[k+1][j] + d[i-1] * d[k] * d[j];
    }
    c[i][j] = minim;
}

void solve()
{
    for (int i = 1; i <= n; i++)
        c[i][i] = 0;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n-i; j++)
            calc(j, j+i);
}

int main()
{
    freopen("podm.in", "r", stdin);
    freopen("podm.out", "w", stdout);

    scanf("%d\n", &n);
    for (int i = 0; i <= n; i++)
        scanf("%d ", &d[i]);
    solve();
    printf("%d", c[1][n]);
    return 0;
}