Cod sursa(job #813266)

Utilizator teonasipoteanuTeona Sipoteanu teonasipoteanu Data 15 noiembrie 2012 08:28:52
Problema Parantezare optima de matrici Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 kb
#include <fstream>

using namespace std;

ifstream fin("podm.in");
ofstream fout("podm.out");

long long n, d[510], cmin[510][510];

void citire();
void pd();
void afisare();
//void afisare_rec(int i, int j);

int main()
{
	citire();
	pd();
	afisare();
	fout.close();
	return 0;
}

void citire()
{
    int i;
	fin>>n; //citim nr de matrici inmultite
	for(i=1;i<=n+1;i++) //citim cele n+1 dimensiuni
		fin>>d[i];
}

void pd()
{
	int i, j, k, lg, p;
	//initializam
	for(i=1;i<=n;i++)
        cmin[i][i]=0;
	for(i=1;i<=n;i++)
	{
	    cmin[i+1][i];
        cmin[i][i+1]=d[i]*d[i-1]*d[i+1];
	}

	for(lg=3;lg<=n;lg++) // lungimea secventei
		for(i=1;i+lg-1<=n;i++) // inceputul secventei
		{
			j=i+lg-1; // sfarsitul secventei
            cmin[i][j]=1000000000;
            for(k=i;k<j;k++)
            {
                p= cmin[i][k] + cmin[k+1][j] + d[i-1]*d[k]*d[j];
                if(p<cmin[i][j])
                {
                    cmin[i][j]=p;
                    cmin[j][i]=k;
                }
            }
		}
}

void afisare()
{
	fout<<cmin[1][n];
	fout<<'\n';
	//afisare_rec(1,n);
}
/*
void afisare_rec(int i,int j) // afiseaza parantezarea optimala a matricilor de la Ai ... Aj
{

    if(cmin[i][j]==i)
        fout<<"A"<<i;
    else
    {
        fout<<"(";
        afisare_rec(cmin[j][i], j);
        fout<<")";
    }
    fout<<"*";
    if(cmin[j][i]+1==j)
        fout<<"A"<<j;
    else
    {
       fout<<"(";
       afisare_rec(cmin[j][i]+1, j);
       fout<<")";
    }

}*/