Cod sursa(job #1934748)

Utilizator M.AndreiMuntea Andrei Marius M.Andrei Data 21 martie 2017 19:29:53
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <map>
#include <unordered_map>
#include <set>
#include <vector>
#include <cstdio>
#include <string>
using namespace std;

#define ll long long
#define ull unsigned long long

/*------------------------------------------------------------------*/

ifstream f{"podm.in"};
ofstream q{"podm.out"};

int n;
unsigned long long mat[505][505];
int dim[505];

int main()
{
   ios_base::sync_with_stdio(false) , cin.tie(nullptr) , cout.tie(nullptr);

   f >> n;
   for (int i = 0; i <= n; ++i) f >> dim[i];

   for (int i = 1; i <= n - 1; ++i) mat[i][i + 1] = static_cast<ull>(1) * dim[i] * dim[i - 1] * dim[i + 1];

   for (int d = 2; d <= n; ++d)
   {
      for (int i = 1; i <= n - d; ++i)
      {
         mat[i][i + d] = numeric_limits<ull>::max();
         for (int k = i, rp = i + d; k <= rp; ++k)
         {
            mat[i][i + d] = min(mat[i][i + d], mat[i][k] + mat[k + 1][i + d] + dim[i - 1] * dim[k] * dim[i + d]);
         }
      }
   }

   q << mat[1][n];


   f.close();
   q.close();
   return 0;
}