Mai intai trebuie sa te autentifici.
Cod sursa(job #522723)
| Utilizator | Data | 15 ianuarie 2011 22:49:44 | |
|---|---|---|---|
| Problema | Parantezare optima de matrici | Scor | 90 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.71 kb |
#include<stdio.h>
FILE*f=fopen("podm.in","r");
FILE*g=fopen("podm.out","w");
long long d[1<<9];
long long bst[1<<9][1<<9],aux;
long long Inf = 1LL << 60;
int i,j,k,N;
int main () {
fscanf(f,"%d",&N);
for ( i = 1 ; i <= N + 1 ; ++i ){
fscanf(f,"%d",&d[i]);
}
for ( i = 2 ; i <= N ; ++i ){
bst[i][i+1] = 1LL * d[i-1] * d[i] * d[i+1];
}
for ( k = 2 ; k < N ; ++k ){
for ( i = 2 ; i + k <= N + 1; ++i ){
bst[i][i+k] = Inf;
for ( j = i ; j < i + k ; ++j ){
aux = bst[i][j] + bst[j+1][i+k] + d[i-1] * d[i+k] * d[j] ;
if ( bst[i][i+k] > aux )
bst[i][i+k] = aux;
}
}
}
fprintf(g,"%lld\n",bst[2][N+1]);
fclose(f);
fclose(g);
return 0;
}
