Cod sursa(job #1599178)

Utilizator DiClauDan Claudiu DiClau Data 13 februarie 2016 17:53:55
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<stdio.h>
using namespace std;
const int N = 505;
const long long INF = 1000000000000000;
long long mat[N][N], v[N];
long long minim (long long a, long long b)
{
    if (a < b)
        return a;
    return b;
}
int main ()
{
    FILE *in, *out;
    in = fopen ("podm.in", "r");
    out = fopen ("podm.out", "w");
    int n;
    fscanf (in, "%d", &n);
    int i;
    for (i = 0; i <= n; i++)
        fscanf (in, "%lld", &v[i]);
    int j;
    for (i = 1; i <= n - 1; i++)
        mat[i][i + 1] = v[i - 1] * v[i] * v[i + 1];
    int c, k;
    for (c = 2; c <= n - 1; c++)
        for (i = 1; i <= n - c; i++)
        {
            j = c + i;
            mat[i][j] = INF;
            for (k = i; k <= j - 1; k++)
                mat[i][j] = minim (mat[i][j], mat[i][k] + mat[k + 1][j] + v[i - 1] * v[k] * v[j]);
        }
    fprintf (out, "%lld", mat[1][n]);
    return 0;
}