Cod sursa(job #2200655)

Utilizator LolkekzorChiorean Tudor Lolkekzor Data 2 mai 2018 09:10:54
Problema Parantezare optima de matrici Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.16 kb
#include <stdio.h>
#include <stdlib.h>

const int INF = 1999999999;

FILE *fin, *fout;

long long int n, i, j, k, t, mini, val, v[1005], C[1005][1005];

void citire() {
    fscanf(fin, "%d", &n);
    for (i = 1 ; i <= n + 1 ; i++)
        fscanf(fin, "%d", &v[i]);
}

void findMinimum() {
    for (k = 1 ; k <= n - 1 ; k++) {
        for (i = 1 ; i <= n - k ; i++) {
            j = i + k;
            mini = INF;
            for (t = i ; t < j ; t++) {
                val = C[ i ][ t ] + C[ t + 1 ][ j ] + v[ i ] * v[ t + 1 ] * v[ j + 1 ];
                if (mini > val) {
                    mini = val;
                    C[ i ][ j ] = mini;
                    C[ j ][ i ] = t;
                }
            }
        }
    }
}

void printOrder(int i, int j) {
    if (i == j)
        return;

    int split = C[ j ][ i ];
    printOrder(i, split);
    printOrder(split + 1, j);

    printf("(%d : %d) ", i, j);
}

int main()
{
    fin = fopen("podm.in", "r");
    fout = fopen("podm.out", "w");
    citire();
    findMinimum();
    //printOrder(1, n);
    //printf("\n");

    fprintf(fout, "%d", C[ 1 ][ n ]);

    return 0;
}