Cod sursa(job #1755614)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 10 septembrie 2016 17:45:36
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <cstdio>
#define MAXN 500
#define INF 1000000000000000000LL
long long dp[MAXN+1][MAXN+1];
int d[MAXN+2];
int main(){
   FILE*fi,*fout;
   int i,j,n,k;
   fi=fopen("podm.in" ,"r");
   fout=fopen("podm.out" ,"w");
   fscanf(fi,"%d " ,&n);
   for(i=1;i<=n+1;i++)
     fscanf(fi,"%d " ,&d[i]);
   for(i=1;i<n;i++)
     dp[i][i+1]=d[i]*d[i+1]*d[i+2];
   for(i=2;i<n;i++)
    for(j=1;j+i<=n;j++){
      dp[j][j+i]=INF;
      for(k=j;k<j+i;k++)
       if(dp[j][j+i]>dp[j][k]+dp[k+1][j+i]+d[j]*d[j+i+1]*d[k+1])
         dp[j][j+i]=dp[j][k]+dp[k+1][j+i]+d[j]*d[j+i+1]*d[k+1];
    }
   fprintf(fout,"%lld" ,dp[1][n]);
   fclose(fi);
   fclose(fout);
   return 0;
}