Cod sursa(job #1390833)

Utilizator AdrianGotcaAdrian Gotca AdrianGotca Data 17 martie 2015 13:11:29
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>

using namespace std;

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

unsigned long long n,a[550],v[550][550];
void read();
void solve();
void write();
int main()
{
    read();
    solve();
    write();
    return 0;
}

void read()
{
    int i=0;
    fscanf(f,"%d",&n);
    for (i=1;i<=n+1;i++)
        fscanf(f,"%d",&a[i]);
}

void solve()
{
    unsigned long long i=0,d=0,j=0,k=0,minim=0;
    for (i=1;i<n;i++)
        v[i][i+1]=a[i]*a[i+1]*a[i+2];
    for (d=2;d<=n;d++)
        for (i=1,j=d;j<=n;i++,j++)
        {
            minim=v[i][i]+v[i+1][j]+a[i]*a[i+1]*a[j+1];
            for (k=i;k<j;++k)
                if (minim>v[i][k]+v[k+1][j]+a[i]*a[k+1]*a[j+1])
                    minim=v[i][k]+v[k+1][j]+a[i]*a[k+1]*a[j+1];
            v[i][j]=minim;
        }
}

void write()
{
    fprintf(g,"%lld",v[1][n]);
}