Cod sursa(job #471687)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 20 iulie 2010 13:50:15
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <string.h>
#include <stdio.h>
#define N 505
typedef long long int i64;
i64 d[N];
i64 mat[N][N];
int main ()
{freopen("podm.in","r",stdin);
 freopen("podm.out","w",stdout);
 int n,i,j,k;
 scanf("%d",&n);
 for (i=1;i<=n+1;i++)
 {scanf("%lld",&d[i]);
 }

 //mat[2-doua matrici][1-incepe cu prima matrice]
 //matricea i are dimensiunea d[i] si d[i+1]
 memset(mat,0x7f,sizeof(mat));
 for (i=1;i<=n;i++)
 {mat[1][i]=0;
 }
 for (i=1;i<n;i++)
 {mat[2][i]=d[i]*d[i+1]*d[i+2];
 }
 
 for (i=3;i<=n;i++) //cate matrici
 {for (j=1;j+i-1<=n;j++)//de unde incepe
  {for (k=1;k<=i-1;k++)//taie dupa prima .. taie dupa i-1
   {if(mat[k][j]+d[j]*d[j+k]*d[j+i]+mat[i-k][j+k]<mat[i][j])
    {mat[i][j]=mat[k][j]+d[j]*d[j+k]*d[j+i]+mat[i-k][j+k];
    }
   }
  }
 }
 printf("%lld",mat[n][1]);
 return 0;
}