Cod sursa(job #2379855)

Utilizator Radu_FilipescuFilipescu Radu Radu_Filipescu Data 14 martie 2019 10:27:32
Problema Parantezare optima de matrici Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>

using namespace std;

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

const int NMAX = 505;
const long long INF = 2000000000000000000;

int N;
int l[NMAX], c[NMAX];

long long dp[NMAX][NMAX];

void Read()
{
  fin >> N;

  fin >> l[1];

  for( int i = 2; i <= N + 1; ++i )
  {
    fin >> c[i - 1];
    l[i] = c[i - 1];
  }

  fin.close();
}

void Do()
{
  for( int i = 1; i < N; ++i )
    dp[i][i + 1] = l[i] * l[i + 1] * c[i + 1];

  for( int d = 2; d <= N; ++d )
  {
    for( int i = 1; i + d <= N; ++i )
    {
      long long minn = INF;

      for( int j = i; j < i + d; ++j )
        minn = min( minn, dp[i][j] + dp[j + 1][i + d] + 1LL * l[i] * l[j + 1] * c[i + d] );

      dp[i][i + d] = minn;
    }
  }

  fout << dp[1][N] << '\n';
}

int main()
{
    Read();
    Do();

    return 0;
}