Cod sursa(job #588432)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 7 mai 2011 23:19:03
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include<fstream.h>
long a[501][501][2],m1,m2,t1,t2,v1,v2;
int dim[501],i,n,j,d,k;
int main()
{ifstream f("podm.in");
ofstream g("podm.out");
f>>n;
for(i=0;i<=n;i++)
      f>>dim[i];
for(i=1;i<=n;i++)
      a[i][i][0]=0,a[i][i][1]=0;
for(i=1;i<n;i++)
      {t1=(dim[i-1]*dim[i])/1000;
      t2=(dim[i-1]*dim[i])%1000;
      a[i][i+1][0]=(t1*dim[i+1])/1000;
      a[i][i+1][1]=(((t1*dim[i+1])%1000)+(t2*dim[i+1])/1000)*1000+(t2*dim[i+1])%1000;}
for(d=2;d<n;d++)
for(i=1;i<=n-d;i++)
      {a[i][i+d][0]=400000000;
      a[i][i+d][1]=0;
      for(k=i;k<i+d;k++)
             {t1=(dim[i-1]*dim[k])/1000;
             t2=(dim[i-1]*dim[k])%1000;
             v1=(t1*dim[i+d])/1000;
             v2=(((t2*dim[i+d])/1000)+((t1*dim[i+d])%1000))*1000+(t2*dim[i+d])%1000;
             m1=a[i][k][0]+a[k+1][i+d][0]+v1;
             m2=a[i][k][1]+a[k+1][i+d][1]+v2;
             if(a[i][i+d][0]>m1||(a[i][i+d][0]==m1&&a[i][i+d][1]>m2))
                     a[i][i+d][0]=m1,a[i][i+d][1]=m2;}}
if(a[1][n][0]==0)
      g<<a[1][n][1];
else
      {g<<(a[1][n][0]+a[1][n][1]/1000000);
      if(a[1][n][1]%1000000<100000)
              g<<"0";
      g<<a[1][n][1]%1000000;}
f.close();
g.close();
return 0;}