Cod sursa(job #886531)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 22 februarie 2013 22:51:49
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<fstream>

using namespace std;

const int MAX_N = 502;

int N, x;
int R[ MAX_N ], C[ MAX_N ];
unsigned long long int D[ MAX_N ][ MAX_N ];

int main()
{
    ifstream f("podm.in");
    ofstream g("podm.out");

    f >> N >> x;

    R[1] = x;
    for(int i = 2; i <= N + 1; ++i)
    {
        f >> x;

        C[i-1] = x;
        R[i] = x;
    }

    for(int i = 1; i < N; ++i)
        D[i][i+1] = R[i] * C[i] * C[i+1];
    for(int q = 2; q < N; ++q)
        for(int i = 1; i + q <= N; ++i)
        {
            int j = i + q;
            unsigned long long int Min = D[i][i] + D[i+1][j] + (long long) ( (long long ) (R[i] * C[i]) * C[j] );
            for(int k = i + 1; k < j; ++k)
            {
                if(D[i][k] + D[k+1][j] + (long long) ( (long long ) (R[i] * C[k]) * C[j] )  < Min)
                    Min = D[i][k] + D[k+1][j] + (long long) ( (long long ) (R[i] * C[k]) * C[j] );
            }
            D[i][j] = Min;
        }

    g << D[1][N] << '\n';

    f.close();
    g.close();

    return 0;
}