Cod sursa(job #2259837)

Utilizator Pop_EmilPal Tamas Pop_Emil Data 13 octombrie 2018 20:26:15
Problema Parantezare optima de matrici Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>

using namespace std;

FILE *in = fopen("podm.in","r");
FILE *out = fopen("podm.out", "w");

int N;
int v[505];

long C[505][505];
int D[505][505];

int main()
{
    fscanf(in, "%d", &N);
    for(int i=0; i<=N; ++i)
    {
        fscanf(in, "%d", &v[i]);
    }

    for(int i=1; i<=N; ++i)
        C[i][i] = 0;

    for(int i=1; i<=N-1; ++i)
    {
        C[i][i+1] = v[i-1]*v[i]*v[i+1];
        D[i][i+1] = i;
    }


    for(int j=3; j<=N; ++j)
        for(int i=1; i<=N-j+1; ++i)
        {
            int min_val;
            //int min_k;
            bool l = false;

            for(int k=i; k<=j+i-2; ++k)
            {
                int x = C[i][k] + C[k+1][j+i-1] + v[i-1]*v[k]*v[j+i-1];

                if(!l)
                {
                    min_val = x;
                    //min_k = k;

                    l = true;
                }
                else if(l && x < min_val)
                {
                    min_val = x;
                    //min_k = k;
                }
            }


            C[i][j+i-1] = min_val;
            //D[i][j+i-1] = min_k;
        }

    fprintf(out, "%d", C[1][N]);

    return 0;
}