Cod sursa(job #2032293)

Utilizator PinkiePie1189Preoteasa Mircea-Costin PinkiePie1189 Data 4 octombrie 2017 19:42:07
Problema Parantezare optima de matrici Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include<stdio.h>
#include<utility>
#define MAXN 500
int din(int N);
FILE*fin,*fout;
std::pair<int,int> dimensions[MAXN+1];
int main()
{
    fin=fopen("podm.in","r");
    fout=fopen("podm.out","w");
    int N;
    fscanf(fin,"%d",&N);
    int x;
    fscanf(fin,"%d",&x);
    dimensions[0].second=x;
    for(int i=1;i<=N;i++)
    {
        fscanf(fin,"%d",&x);
        dimensions[i].first=dimensions[i-1].second;
        dimensions[i].second=x;
    }
    int ans=din(N);
    fprintf(fout,"%d",ans);
    fclose(fin);
    fclose(fout);
}
int din(int N)
{
    int ant=dimensions[1].first*dimensions[1].second*dimensions[2].second,preant=0;
    if(N==1)
    {
        return 0;
    }
    for(int i=3;i<=N;i++)
    {
        if(ant+dimensions[1].first*dimensions[i-1].second*dimensions[i].second < preant+dimensions[i-1].first*dimensions[i-1].second*dimensions[i].second+dimensions[1].first*dimensions[i-1].first*dimensions[i].second)
        {
            preant=ant;
            ant=ant+dimensions[1].first*dimensions[i-1].second*dimensions[i].second;
        }
        else
        {
            int aux=ant;
            ant=preant+dimensions[i-1].first*dimensions[i-1].second*dimensions[i].second+dimensions[1].first*dimensions[i-1].first*dimensions[i].second;
            preant=ant;
        }
    }
    return ant;
}