Cod sursa(job #3253129)

Utilizator divadddDavid Curca divaddd Data 1 noiembrie 2024 16:15:59
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int NMAX = 502;
const int INF = 1e18;
int n,d[NMAX],dp[NMAX][NMAX];

ifstream fin("podm.in");
ofstream fout("podm.out");

template<typename T>
void minSelf(T &a, T b){
  a = min(a, b);
}

signed main() {
  fin >> n;
  for(int i = 0; i < n+1; i++){
    fin >> d[i];
  }
  for(int i = 1; i <= n; i++){
    for(int j = i+1; j <= n; j++){
      dp[i][j] = INF;
    }
  }
  for(int i = 1; i < n; i++){
    dp[i][i+1] = d[i-1] * d[i] * d[i+1];
  }
  for(int len = 2; len <= n; len++){
    for(int i = 1; i <= n-len+1; i++){
      int j = i+len-1;
      for(int k = i; k < j; k++){
        minSelf(dp[i][j], dp[i][k] + dp[k+1][j] + d[i-1] * d[j] * d[k]);
      }
    }
  }
  fout << dp[1][n];
  return 0;
}