Cod sursa(job #2000533)

Utilizator zvonTutuldunsa Voronokda zvon Data 14 iulie 2017 00:02:09
Problema Parantezare optima de matrici Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.73 kb
#include<stdio.h>
#include<stdlib.h>
#define min(a, b) ((a)<(b)?(a):(b))

long long d[502];
long long m[502][502];

int main() {
	FILE *fi, *fo;
	int n;
	int i, j, k;

	fi = fopen("podm.in", "r");
	fo = fopen("podm.out", "w");
	fscanf(fi, "%d", &n);	
	for (i = 0; i <= n; i++) {
		fscanf(fi, "%lld", &d[i]);
		m[i][i] = 0;
	}
	for (i = 1; i <= n - 1; i++) {
		m[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
	}
	long long val;
	int r;
	for (k = 2; k < n; k++) {
		for (i = 1; i <= n - k; i++) {
			r = i + k;
			m[i][r] = m[i + 1][r] + d[i - 1] * d[i] * d[r];
			for (j = i; j < r; j++) {
				val = m[i][j] + m[j + 1][r] + d[i - 1] * d[j] * d[r];
				m[i][r] = min(m[i][r], val);	
			}
		}
	}
	fprintf(fo, "%lld", m[1][n]);

	fclose(fi);
	fclose(fo);
}