Mai intai trebuie sa te autentifici.
Cod sursa(job #2042179)
| Utilizator | Data | 18 octombrie 2017 10:11:26 | |
|---|---|---|---|
| Problema | Parantezare optima de matrici | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.8 kb |
#include <iostream>
#include <fstream>
#define dm 505
#define LL long long
#define inf8 100000000000000000LL
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
LL minim(LL a, LL b)
{
if(a>b)
return b;
else return a;
}
int n;
LL a[dm];
LL m[dm][dm];
int main()
{
fin >> n;
for(int i = 0; i <= n; i++)
fin >> a[i];
for(int i = 1; i <= n; i++)
m[i][i] = 0;
for(int i = 1; i <= n - 1; i++)
m[i][i+1] = a[i-1] * a[i] * a[i+1];
for(int i = 2; i < n; i++ ){
for(int j = 1; j <= n - i; j++){
m[j][i+j] = inf8;
for(int k = i; k < i + j; k++)
m[j][j+i] = minim(m[j][i+j], m[j][k]+m[k+1][i+j]+a[j-1]*a[k]*a[i+j]);
}
}
fout << m[1][n];
return 0;
}
