Cod sursa(job #1017369)

Utilizator DaniEsDani Stetcu DaniEs Data 27 octombrie 2013 18:33:49
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
long long D[505], DP[505][505], diff, INF = 1 << 25;
int N;
void read()
{
    fin>>N;
    for(int i=0; i<=N; i++)
        fin>>D[i];
}
void dynamics()
{
    int j;
    for (int i = 1 ;i < N; ++i)
        DP[i][i+1] = D[i-1]*D[i]*D[i+1];
    for (diff = 2; diff<=N-1; ++diff)
        for (int i=1; i<=N-diff; ++i)
        {
            j = i  + diff ;
            DP[i][j]=INF;
            for (int k = i; k< j; ++k)
                DP[i][j] = min(DP[i][j], DP[i][k] + DP[k+1][j] + D[i-1] * D[k] * D[j]);
        }

}
void Print()
{
    fout<<DP[1][N];
}
int main()
{
    read();
    dynamics();
    Print();
    return 0;
}