Cod sursa(job #3275056)

Utilizator n6v26rDedu Razvan Matei n6v26r Data 9 februarie 2025 09:34:32
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstring>
#include <stdio.h>

typedef long long ll;

#define MAXN 555
#define MIN(a, b) ((a) < (b) ? (a) : (b))

int n;
ll dp[MAXN][MAXN];
int v[MAXN];

int main() {
  freopen("podm.in", "r", stdin);
  freopen("podm.out", "w", stdout);
  scanf("%d", &n);
  for (int i = 0; i <= n; i++) {
    scanf("%d", &v[i]);
  }

  memset(dp, 127, sizeof(dp));

  for (int i = 1; i <= n; i++) {
    dp[i][i] = 0;
    if (i < n)
      dp[i][i + 1] = (ll)v[i - 1] * v[i] * v[i + 1];
  }

  for (int x = 2; x <= n; x++) {
    for (int i = 1; i <= n - x; i++) {
      for (int k = i; k < i + x; k++) {
        dp[i][i + x] = MIN(dp[i][i + x], dp[i][k] + dp[k + 1][i + x] +
                                             (ll)v[i - 1] * v[k] * v[i + x]);
      }
    }
  }
  printf("%lld\n", dp[1][n]);

  return 0;
}