Cod sursa(job #1466709)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 29 iulie 2015 23:14:11
Problema Parantezare optima de matrici Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>

#define MAX 505

#define INF 1<<30



int n, i, j, k, d[MAX], m[MAX][MAX];



int parantopt();



int main()
{

    freopen("podm.in", "r", stdin);
    freopen("podm.out", "w", stdout);
    scanf("%d", &n);

    for(i = 0; i <= n; i++)

        scanf("%d", &d[i]);

    
    printf("%d\n", parantopt());

    return 0;

}



int parantopt(){

    for(i = n; i >= 1; i--)

        for(j = i; j <= n; j++){

            if(i == j)

                m[i][j] = 0;

            else if(j == i + 1)

                m[i][j] = d[i - 1] * d[i] * d[i + 1];

            else{

                m[i][j] = INF;
                for(k = i; k <= j; k++)

                    if(m[i][j] > m[i][k] + m[k + 1][j] + d[i - 1] * d[k] * d[j])

                        m[i][j] = m[i][k] + m[k + 1][j] + d[i - 1] * d[k] * d[j];

            }

        }

        return m[1][n];

}