Cod sursa(job #1466747)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 30 iulie 2015 09:24:43
Problema Parantezare optima de matrici Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>
#define MAX 505

int n, i, j, k;
long long d[MAX], m[MAX][MAX];

long long parantopt(){
	for(i = n; i >= 1; i--)
		for(j = i; j <= n; j++){
			if(i == j)
      	m[i][j] = 0;
			else if(j == i + 1)
				m[i][j] = d[i - 1] * d[i] * d[i + 1];
			else{
				m[i][j] = m[i][i] + m[i + 1][j] + d[i - 1] * d[i] * d[j];
				for(k = i + 1; k < j; k++)
					if(m[i][j] > m[i][k] + m[k + 1][j] + d[i - 1] * d[k] * d[j])
						m[i][j] = m[i][k] + m[k + 1][j] + d[i - 1] * d[k] * d[j];
			}
		}
	return m[1][n];
}

int main(){
	freopen("podm.in", "r", stdin);
  freopen("podm.out", "w", stdout);
  scanf("%d", &n);
  for(i = 0; i <= n; i++)
  	scanf("%lld", &d[i]);
  printf("%lld\n", parantopt());
  return 0;
}