Cod sursa(job #2032705)

Utilizator PinkiePie1189Preoteasa Mircea-Costin PinkiePie1189 Data 5 octombrie 2017 16:38:14
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<stdio.h>
#include<utility>
#define MAXN 500
#define INF 1000000000
int din(int,int);
FILE*fin,*fout;
int dimensions[MAXN+1];
int 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]);
    }
    int ans=din(1,N);
    fprintf(fout,"%d",ans);
    fclose(fin);
    fclose(fout);
}
int din(int st,int dr)
{
    for(int d=1;d<=dr-st;d++)
    {
        for(int i=st;i<=dr-d;i++)
        {
            int ans=INF;
            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];
}