Cod sursa(job #1059215)
| Utilizator | Data | 16 decembrie 2013 13:39:42 | |
|---|---|---|---|
| Problema | Parantezare optima de matrici | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.66 kb |
#include <stdio.h>
#define fr(i,a,b) for(int i=a;i<b;++i)
#define ll long long
#define N 500
int a[N+1];
ll b[N][N];
int main(){
freopen("podm.in","r",stdin);
freopen("podm.out","w",stdout);
int n;
scanf("%i",&n);
fr(i,0,n)scanf("%i",a+i);
scanf("%i",a+n);
fr(i,0,n)b[i][i]=0;
fr(l,1,n){
fr(i,0,n-l){
int j=i+l;
b[i][j]=-1;
ll y=(ll)a[i]*(ll)a[j+1];
fr(k,i,j){
ll t=(ll)a[k+1]*y+b[i][k]+b[k+1][j];
if(b[i][j]==-1||t<b[i][j])b[i][j]=t;
}
}
}
printf("%lli",b[0][n-1]);
return 0;
}
