Cod sursa(job #2032707)

Utilizator PinkiePie1189Preoteasa Mircea-Costin PinkiePie1189 Data 5 octombrie 2017 16:42:09
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include<stdio.h>
#include<utility>
#include<climits>
#define MAXN 500
#define INF 1000000000
long long din(int,int);
FILE*fin,*fout;
int dimensions[MAXN+1];
long long best[MAXN+1][MAXN+1];
int main()
{
    fin=fopen("podm.in","r");
    fout=fopen("podm.out","w");
    int N;
    fscanf(fin,"%d",&N);
    for(int i=0;i<=N;i++)
    {
        fscanf(fin,"%d",&dimensions[i]);
    }
    long long ans=din(1,N);
    fprintf(fout,"%lld",ans);
    fclose(fin);
    fclose(fout);
}
long long din(int st,int dr)
{
    for(int d=1;d<=dr-st;d++)
    {
        for(int i=st;i<=dr-d;i++)
        {
            long long ans=LONG_LONG_MAX;
            for(int k=i;k<i+d;k++)
            {
                if(best[i][k]+best[k+1][i+d]+dimensions[i-1]*dimensions[k]*dimensions[i+d] < ans)
                {
                    ans=best[i][k]+best[k+1][i+d]+dimensions[i-1]*dimensions[k]*dimensions[i+d];
                }
            }
            best[i][i+d]=ans;
        }
    }
    #ifndef INFOARENA
    for(int i=st;i<=dr;i++)
    {
        for(int j=i;j<=dr;j++)
        {
            fprintf(stderr,"%d ",best[i][j]);
        }
        fprintf(stderr,"\n");
    }
    #endif // INFOARENA
    return best[st][dr];
}