Cod sursa(job #1366697)

Utilizator alexandru94hahahalera alexandru94 Data 1 martie 2015 13:08:07
Problema Parantezare optima de matrici Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>

using namespace std;

#define INF 32767

ifstream in ("podm.in");
ofstream out ("podm.out");
int p[505], m[505][505], s[100][100],coloana, linie, i, j, k, l, q, n;


int main ()
{
// s for solution
	in >> n;
	for(i = 0; i <= n; i++)
	{
		in >> p[i];
		m[i][0] = 0;
	}
	
	for(linie = 2; linie <= n; linie++) 
	{
		for(coloana = 1; coloana <= n - linie + 1; coloana++)
		{
			j = coloana + linie - 1; // pentru translatare deasupra diagonalei principale
			m[coloana][j] = INF;
		
			for(k = coloana; k <= j - 1; k++)
			{
				q = m[coloana][k] + m[k + 1][j] + p[coloana-1]*p[k]*p[j];
				if(q < m[coloana][j] )
				{
					m[coloana][j] = q;
//					s[coloana][j] = k;
				}
			}
		}
	}
	
	out<<m[1][n]<<"\n";
	
	return 0;
}





/*	cout<<"\n\n\n";
	for(i = 0; i <= n; i++)
	{
		cout.width(7);
		cout<<p[i]<<" ";
	}
	cout<<"\n";
	for(i = 1; i <= n; i++) 
	{
		cout<<"   ";
		for(j = 1; j <= n; j++)
		{
			cout.width(7);
			cout<<m[i][j]<<" ";
		}
		cout<<"\n";
	}

	cout<<"\n";
	for(i = 1; i <= n; i++) 
	{
		cout<<"   ";
		for(j = 1; j <= n; j++)
		{
			cout.width(7);
			cout<<s[i][j]<<" ";
		}
		cout<<"\n";
	}
	*/