Cod sursa(job #2305652)

Utilizator vladboss2323Ciorica Vlad vladboss2323 Data 20 decembrie 2018 19:15:36
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream in("podm.in");
ofstream out("podm.out");

const int N=505;
const long long INF=999999999999999999;

struct paranteze
{
    int first,second,third;
};
paranteze poz[N];

int n,a[N];
long long d[N][N];
int main()
{
    int i,j,k;
    long long minim;
    minim=INF;
    in>>n;
    for(i=1; i<=n+1; i++)
        in>>a[i];
    //d[i][j] = produsul min al matricelor de la i la j
    //d[i][i] = 0
    //d[i][j] = min(d[i][k] + d[k+1][j] + a[i]*a[k+1]*a[j+1]) pt i<=k<j
    for(i=n; i>=1; i--)
        for(j=1; j<=n; j++)
        {
            minim=INF;
            if(i==j)
                d[i][j]=0;
            // else if(j==i+1 || i==j+1)
            //   d[i][j]=a[i]*a[j]*a[j+1];
            else
            {
                for(k=i; k<j; k++)
                {
                    if((d[i][k]+d[k+1][j]+(long long )a[i]*a[k+1]*a[j+1]) < minim)
                    {
                        minim = (long long)(d[i][k]+d[k+1][j]+(long long)a[i]*a[k+1]*a[j+1]);
                        poz[i].first=i;
                        poz[i].second=k;
                        poz[i].third=j;
                    }
                }
                d[i][j]=minim;
            }

        }
        /*
    for(i=1; i<=n; i++)
    {
        for(j=i; j<=n; j++)
            out<<d[i][j]<<" ";
        out<<endl;
    }
    */
    out<<d[1][n];
    return 0;
}