Cod sursa(job #2000521)

Utilizator zvonTutuldunsa Voronokda zvon Data 13 iulie 2017 22:59:21
Problema Parantezare optima de matrici Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 0.83 kb
#include<stdio.h>
#include<stdlib.h>
#define min(a, b) ((a)<(b)?(a):(b))

int d[502];
int 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, "%d", &d[i]);
	}
	for (i = 1; i <= n - 1; i++) {
		m[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
	}
	int mn;
	int val;
	for (k = 2; k < n; k++) {
		for (i = 1; i <= n - k; i++) {
			m[i][i + k] = m[i][i] + m[i + 1][i + k] + d[i - 1] * d[i] * d[i + k];
			for (j = i; j < i + k; j++) {
				val = m[i][j] + m[j + 1][i + k] + d[i - 1] * d[j] * d[i + k];
				m[i][i + k] = min(m[i][i + k], val);	
			}
		}
	}
	fprintf(fo, "%d", m[1][n]);
	/*for (k = 0; k <= n; k++) {
		for (i = 0; i <= n; i++) {
			printf("%d ", m[k][i]);
		}
		printf("\n");
	}*/

	fclose(fi);
	fclose(fo);
}