Cod sursa(job #758709)

Utilizator MarquiseMarquise Marquise Data 16 iunie 2012 12:15:53
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#define NMAX 501
#define INF 100000000000000000LL

using namespace std;

int m[NMAX], n;
long long cost[NMAX][NMAX];

int min(int a , int b)
{
    return a < b ? a : b;
}

int main()
{
    int i, d, k, j;
    
    freopen("podm.in", "r", stdin);
    freopen("podm.out", "w", stdout);
    
    scanf("%d", &n);
    for ( i = 0; i <= n; i++)
        scanf("%d", &m[i]);
        
    for ( d = 1; d < n; d++)
        cost[d][d+1] =  m[d-1] * m[d] * m[d+1];
        
        
    for ( d = 2; d < n; d++)  // pe a cata diagonala sunt -1 
        for ( i = 1; i <= n - d; i++) 
        {
            j = d + i;
            cost[i][j] = INF;
            for ( k = i; k < j; k++)
                cost[i][j] = min(cost[i][j], cost[i][k] + cost[k+1][j] + m[i-1] * m[k] * m[j]);
                  
        }        
 
    
    printf("%d\n", cost[1][n] );
    
    fclose(stdin);    
    fclose(stdout);
    return 0;
}