Cod sursa(job #1023485)

Utilizator sziliMandici Szilard szili Data 7 noiembrie 2013 00:35:31
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

using namespace std;

int d[502];
long long a[502][502];

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

    int n;
    scanf("%d", &n);

    for (int i=0; i<=n; i++){
        scanf("%d", &d[i]);
    }

    for (int i=1; i<=n; i++){
        a[i][i] = 0;
    }

    for (int i=1; i<=n-1; i++){
        a[i][i+1] = d[i-1] * d[i] * d[i+1];
    }


    for (int j=3; j<=n; j++){
        for (int i=1; i<= n-j+1; i++){
            long long minn = LONG_LONG_MAX;

            int from = i;
            int to = j+i-1;


            for (int k=from; k<to; k++){
                long long current = d[from-1] *d[k]*d[to] + a[from][k] + a[k+1][to];

                if (current < minn){
                    minn = current;
                }
            }

            a[i][j+i-1] = minn;
        }
    }

    printf("%lld", a[1][n]);


    return 0;
}