Cod sursa(job #1723171)

Utilizator Mihai7Gheoace Mihai Mihai7 Data 29 iunie 2016 21:51:20
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <cstdio>
#include <climits>

using namespace std;
#define N 501
#define type long long
long long d[N],n,  M[N][N];
char buff[4096];
short pos=4096;
inline char nextchar()
{
    if(pos==4096)
    {
        fread(buff,1,4096,stdin);
        pos=0;
    }
    return buff[pos++];
}

inline type nextlong()
{
    char c=nextchar();
    while(c<'0' || c>'9')
        c=nextchar();
    type nr=0;
    while(c>='0' && c<='9')
    {
        nr=nr*10+c-'0';
        c=nextchar();
    }
    return nr;
}
void progDin()
{
    long long nr,i,j,k,kmin,mint;
    for(nr=2;nr<=n;++nr)//cate matrice se inmultesc
    {
        for(i=1;i<=n-nr+1;++i)//indicele Ai
        {
            j=i+nr-1;//se inmultesc nr matrice, de la Ai la Aj
            for(k=i,mint=LLONG_MAX;k<j;++k)
                if(mint>M[i][k]+M[k+1][j]+d[i-1]*d[k]*d[j])//determin minuimul si pozitia sa
                {
                    mint=M[i][k]+M[k+1][j]+d[i-1]*d[k]*d[j];
                    kmin=k;
                }
            M[i][j]=mint;M[j][i]=kmin;
        }

    }
    FILE *g=freopen("podm.out","w",stdout);
    printf("%lld",M[1][n]);
}

 void getPath()
 {
    //alta data


 }

int main()
{
    short i;
    FILE *f=freopen("podm.in","r",stdin);
    scanf("%lld",&n);
    for(i=0;i<=n;++i)
        d[i]=nextlong();
    progDin();
    //getPath();
}