Cod sursa(job #801945)

Utilizator tester9x9Tester9x9 tester9x9 Data 25 octombrie 2012 14:55:23
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <cstring>
#define NM 1010
#define INF 0x3f3f3f3f
#define PI pair<int, int>
#define L first
#define C second

using namespace std;

ifstream f("podm.in");
ofstream g("podm.out");

int DP[NM][NM];
int N,i;
PI DIM[NM];

int Solve (int P, int U)
{
  if (DP[P][U]!=INF) return DP[P][U];

  if (P==U)
  {
    DP[P][U]=0;
    return DP[P][U];
  }

  if (P+1==U)
  {
    DP[P][U]=DIM[P].L*DIM[P].C*DIM[U].C;
    return DP[P][U];
  }

  for (int i=P; i<U; i++)
    DP[P][U]=min(DP[P][U],Solve(P,i)+Solve(i+1,U)+DIM[P].L*DIM[i].C*DIM[U].C);

  return DP[P][U];
}

int CD[NM];

int main ()
{
  f >> N;
  for (i=1; i<=N+1; i++)
    f >> CD[i];
  for (i=1; i<=N; i++)
  {
      DIM[i].L=CD[i];
      DIM[i].C=CD[i+1];
  }

  memset(DP,INF,sizeof(DP));

  g << Solve(1,N) << '\n';

  f.close();
  g.close();

  return 0;
}