Pagini recente » Cod sursa (job #1083727) | Cod sursa (job #2392747) | Cod sursa (job #322248) | Cod sursa (job #3258320) | Cod sursa (job #613410)
Cod sursa(job #613410)
#include <stdio.h>
#define min(a,b) (a<b)?a:b
using namespace std;
int n;
int d[510];
int m[510][510];
void citire()
{
scanf("%d",&n);
for(int i=0;i<=n;i++)
scanf("%d",&d[i]);
}
int val(int i, int j)
{
int minim=99999999;
for(int k=i;k<j;k++)
{
if(minim>m[i][k]+m[k+1][j]+d[i-1]*d[k]*d[j])
minim=m[i][k]+m[k+1][j]+d[i-1]*d[k]*d[j],m[j][i]=k;
}
return minim;
}
void matrice()
{
for(int J=2;J<=n;J++)
{
for(int i=1,j=J;j<=n;j++,i++)
{
m[i][j]=val(i,j);
}
}
}
void afisare(int i,int j)
{
if(i-j==1)
{
printf("A%d*A%d",j,i );
return;
}
if(j-i==1)
{
printf("A%d*A%d",i,j );
return;
}
if(i==j)
{
printf("A%d",j);
return;
}
printf("(");
afisare(m[i][j],j);
printf(")*(");
afisare(m[i][j]+1,i);
printf(")");
}
int main()
{
freopen("fis.in","r",stdin);
citire();
matrice();
printf("%d\n",m[1][n]);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
printf("%6d ",m[i][j]);
}
printf("\n");
}
afisare(n,1);
return 0;
}