Cod sursa(job #813200)
#include <fstream>
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
int n;
int d[101];//marimea fiecarei matrici A1(d0,d1) A2(d1,d2) A3(d2,d3)...
int cmin[100][100];//minimul de inmultiri elementare necesare pt a inmulti matricile Ai...Aj
void citire();
void pd();
void citire(){
int i;
fin>>n;
for(i=0;i<=n;i++)
fin>>d[i];
}
void pd(){//constructia tabloului se face pe diagonala
int i,j;
int k;
int minim1,minim2,s;
for(i=1;i<=n;i++)
cmin[i][i]=0;//cazul de baza, este matricea inmultita cu ea insasi
for(j=1;j<=n-1;j++)
for(i=1;i<=n-j;i++){
s=i+j;
minim1=1000000000;
minim2=-1;
for(k=i;k<=s-1;k++)
if(minim1>cmin[i][k]+cmin[k+1][s]+d[i-1]*d[k]*d[s]){
minim1=cmin[i][k]+cmin[k+1][s]+d[i-1]*d[k]*d[s];
minim2=k;
}
cmin[i][s]=minim1;
cmin[s][i]=minim2;
}
/*for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
fout<<cmin[i][j]<<' ';
fout<<'\n';
}*/
fout<<cmin[1][n];
}
int main(){
citire();
pd();
fout.close();
return 0;
}