Cod sursa(job #2349911)
Utilizator | Data | 20 februarie 2019 20:33:02 | |
---|---|---|---|
Problema | Parantezare optima de matrici | Scor | 70 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.64 kb |
#include <fstream>
#define INF 1000000000
using namespace std;
ifstream fi("podm.in");
ofstream fo("podm.out");
int n;
int L[501],C[501];
int D[502];
int Q[501][501];
int main()
{
fi>>n;
for (int i=1;i<=n+1;i++)
fi>>D[i];
for (int i=1;i<=n;i++)
{
L[i]=D[i];
C[i]=D[i+1];
}
/// se construieste Q
for (int i=n-1;i>=1;i--)
for (int j=i+1;j<=n;j++)
{
Q[i][j]=INF;
for (int k=i;k<=j-1;k++)
Q[i][j]=min(Q[i][j],Q[i][k]+Q[k+1][j]+L[i]*C[k]*C[j]);
}
fo<<Q[1][n];
fi.close();
fo.close();
return 0;
}