Mai intai trebuie sa te autentifici.
Cod sursa(job #2662505)
| Utilizator | Data | 24 octombrie 2020 10:48:38 | |
|---|---|---|---|
| Problema | Parantezare optima de matrici | Scor | 70 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.77 kb |
#define NMAX 505
#include <fstream>
#include <climits>
#include <algorithm>
using namespace std;
ifstream f("podm.in");
ofstream g("podm.out");
int n, d[NMAX];
long long dp[NMAX][NMAX];
void read()
{
f>>n;
for(int i = 0; i <= n; ++i)
f>>d[i];
}
void pd()
{
for(int d_p= 0; d_p <= n-1; ++d_p)
{
for(int i = 1; i <= n; ++i)
{
int j = i + d_p;
long long vmin = LLONG_MAX;
for(int k = i; k <= j-1; ++k)
vmin = min(vmin, dp[i][k] + dp[k+1][j] + 1LL*d[i-1]*d[k]*d[j]);
if(vmin == LLONG_MAX)
vmin = 0;
dp[i][j] = vmin;
}
}
g<<dp[1][n];
}
int main()
{
read();
pd();
return 0;
}
