Cod sursa(job #2744179)

Utilizator cdragomirDragomir Constantin-Cristian cdragomir Data 23 aprilie 2021 22:48:17
Problema Parantezare optima de matrici Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>

using namespace std;

uint64_t find_min(uint64_t dp[][501], 
	uint64_t *d, uint64_t i, uint64_t j) {

	uint64_t min_multiplies = dp[i][i] + dp[i + 1][j] + d[i - 1] * d[i] * d[j];
	for (uint64_t k = i + 1; k < j; k++) {
		uint64_t multiplies = d[i - 1] * d[k] * d[j];
		multiplies = multiplies + (dp[i][k] + dp[k + 1][j]);
		if (multiplies < min_multiplies) {
			min_multiplies = multiplies;
		}
	}
	return min_multiplies;
}

int main() {
	ifstream fin("podm.in");
	ofstream fout("podm.out");
	uint64_t n;
	fin >> n;
	uint64_t d[n + 2];
	for (uint64_t i = 0; i <= n; i++) {
		fin >> d[i];
	}
	uint64_t dp[501][501];
	for (uint64_t i = 1; i <= n; i++) {
		dp[i][i] = 0;
		dp[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
	}

	for (uint64_t i = 2; i <= n; i++) {
		for (uint64_t j = 1; j <= n - i; j++) {
			dp[j][j + i] = find_min(dp, d, j, j + i);
		}
	}

	fout << dp[1][n];
	return 0;
}