Pagini recente » Cod sursa (job #499302) | Istoria paginii utilizator/hennkka | Cod sursa (job #522145) | Cod sursa (job #2368306) | Cod sursa (job #1461387)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("podm.in") ;
ofstream fout ("podm.out") ;
int DIM [ 502 ] , N ;
void Citire ()
{
fin >> N ;
for ( int i = 0 ; i <= N ; ++ i )
fin >> DIM [i] ;
}
long long a [501] [501] ; // matricea inmultirilor
void NrInmultiri ()
{
for ( int i = 1 ; i <= N ; ++ i )
a [i][i] = 0 ; // o matrice nu se inmulteste cu ea insasi // era data global oricum ..
// for ( int i = 1 ; i <= N - 1 ; ++ i )
// a [i][i+1] = DIM [i-1] * DIM [i] * DIM [i+1] ;
for ( int l = 1 ; l <= N - 1 ; ++ l )
for ( int i = 1 ; i <= N - l ; ++ i )
{
int j = i + l ;
a [i][j] = 1LL << 60 ;
for ( int k = i ; k <= j - 1 ; ++ k )
{
int aux = a [i][k] + a [k+1][j] + DIM [i-1] * DIM [k] * DIM [j] ;
if ( a[i][j] > aux )
a [i][j] = aux , a[j][i] = k ; // inchid paranteza dupa matricea A_k
}
}
fout << a [1][N] ;
}
void parcurgere ( int linie , int coloana )
{
int k = a [coloana][linie] ;
if ( k != linie )
parcurgere ( linie , k ) ;
if ( k + 1 != coloana )
parcurgere ( k + 1 , coloana ) ;
cout << linie << " " << coloana << "\n";
}
int main()
{
Citire () ;
NrInmultiri () ;
parcurgere ( 1 , N ) ;
return 0;
}