Cod sursa(job #813200)

Utilizator vlad.bandacBandac Vlad Constantin vlad.bandac Data 15 noiembrie 2012 00:17:40
Problema Parantezare optima de matrici Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#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;
}