Cod sursa(job #1344563)

Utilizator thedarkvoicePopescu Filip thedarkvoice Data 16 februarie 2015 20:28:51
Problema Parantezare optima de matrici Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>
#include <stdlib.h>

int d[501];
long long mat[501][501];

FILE *fo;

void solutie(int st, int dr){
  if(st==dr)
    fprintf(fo, "%d", st);
  else{
    int k=mat[dr][st];
    fprintf(fo, "(");
    solutie(st,k);
    fprintf(fo, "*");
    solutie(k+1,dr);
    fprintf(fo, ")");
  }
}

int main()
{
  int i, n, k, diag;
  long long calcul;
  FILE *fi=fopen("podm.in", "r");
  fo=fopen("podm.out", "w");
  fscanf(fi, "%d", &n);
  for(i=0;i<=n;i++)
    fscanf(fi, "%d", &d[i]);
  for(i=1;i<n;i++){
    mat[i][i+1]=d[i-1]*d[i]*d[i+1];
    mat[i+1][i]=i;
  }
  for(diag=2;diag<n;diag++)
    for(i=1;i<=n;i++){
      mat[i][i+diag]=2147483647;
      for(k=i;k<i+diag;k++){
        calcul=mat[i][k]+mat[k+1][i+diag]+d[i-1]*d[k]*d[i+diag];
        if(mat[i][i+diag]>calcul){
          mat[i][i+diag]=calcul;
          mat[i+diag][i]=k;
        }
      }
    }
  fprintf(fo, "%lld\n", mat[1][n]);
  //solutie(1,n);
  return 0;
}