Cod sursa(job #1486043)

Utilizator mike93Indricean Mihai mike93 Data 13 septembrie 2015 18:44:51
Problema Parantezare optima de matrici Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>

int main() {
	FILE* fin = fopen("podm.in", "r");
	int n;
	int d[501];
	int i;
	fscanf(fin, "%d\n", &n);
	for(i=0; i<=n; i++) {
		fscanf(fin, "%d ", &d[i]);
	}
	fclose(fin);
	
	int m[501][501];
	for(i=1; i<=n; i++) {
		m[i][i] = 0;
	}
	for(i=1; i<n; i++) {
		m[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
	}
	int dd, k;
	int min, val;
	for(dd=2; dd<n; dd++) {
		for(i=1; i<=n-dd; i++) {
			min = 1000000000;
			for(k=i; k<i+dd; k++) {
				val = m[i][k] + m[k + 1][i + dd] + d[i - 1] * d[k] * d[i + dd];
				if(min > val) {
					min = val;
				}
			}
			m[i][i + dd] = min;
		}
	}
	
	FILE* fout = fopen("podm.out", "w");
	fprintf(fout, "%d\n", m[1][n]);
	fclose(fout);
	return 0;
}