Cod sursa(job #1378402)

Utilizator BonCipBonciocat Ciprian Mircea BonCip Data 6 martie 2015 12:00:42
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>
#include <limits.h>
#define nMAX 500
#define LL_MAX 100000000000000000LL

long long d[nMAX + 1];
long long podm[nMAX + 1][nMAX + 1];

int main()
{
	FILE *fin, *fout;
	fin = fopen("podm.in", "r");
	fout = fopen("podm.out", "w");

	int n;
	fscanf(fin, "%d", &n);

	int i, k, delta;
	for (i = 0; i <= n; ++i) {
		fscanf(fin, "%lld", d + i);
	}

	for (delta = 1; delta < n; ++delta) {
		for (i = 1; i <= n - delta; ++i) {
			int j = i + delta;
			podm[i][j] = (1ll << 62);
			for (k = i; k < j; ++k) {
				long long par = podm[i][k] + podm[k + 1][j] + d[i - 1] * d[k] * d[j];
				podm[i][j] = podm[i][j] < par ? podm[i][j] : par;
			}
		}
	}

	fprintf(fout, "%lld\n", podm[1][n]);

	fclose(fin);
	fclose(fout);
	return 0;
}