Cod sursa(job #1537831)

Utilizator stoianmihailStoian Mihail stoianmihail Data 28 noiembrie 2015 10:37:29
Problema Parantezare optima de matrici Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
#include <limits.h>

#define Nadejde 501

#define ll long long

int N;
int val[Nadejde];
ll int d[Nadejde][Nadejde];

ll int MIN(ll int X, ll int Y) {
  return (X < Y) ? X : Y;
}

int main(void) {
  int i, j, k, q;
  FILE *f = fopen("podm.in", "r");

  fscanf(f, "%d", &N);
  for (i = 0; i <= N; i++) {
    fscanf(f, "%d", &val[i]);
  }
  fclose(f);

  f = fopen("podm.out", "w");

  for (q = 1; q < N; q++) {
    for (i = 1; i <= N - q; i++) {
      d[i][j = i + q] = LLONG_MAX;
      for (k = i; k < j; k++) {
        d[i][j] = MIN(d[i][j], d[i][k] + d[k + 1][j] + (1LL * val[i - 1] * val[k] * val[j]));
      }
    }
  }
  fprintf(f, "%lld\n", d[1][N]);
  fclose(f);
  /*
  for (i = 0; i < N + 1; i++) {
    for (j = 0; j < N + 1; j++) {
      printf("%d ", d[i][j] == 0 ? 9999 : d[i][j]);
    }
    printf("\n");
  }
  */
  /// Multumim Doamne!
  puts("Doamne ajuta!");
  return 0;
}