Cod sursa(job #2583680)

Utilizator topala.andreiTopala Andrei topala.andrei Data 18 martie 2020 14:29:55
Problema Parantezare optima de matrici Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>
#define MAXN 502
using namespace std;

ifstream f("podm.in");
ofstream g("podm.out");

int N, dim[MAXN];
int dp[MAXN][MAXN];
void read() {
	f >> N;
	for (int i = 1; i <= N + 1; ++i) {
		f >> dim[i];
	}
}
int get_min_operations() {
	
	for (int len = 2; len <= N; ++len) {
		for (int left = 1; left + len - 1 <= N; ++left) {
			int right = left + len - 1;
			for (int k = left; k <= right; ++k) {

				if (dp[left][right] == 0) {
					dp[left][right] = dp[left][k] + dp[k + 1][right] + dim[left] * dim[k + 1] * dim[right + 1];
				} else {
					dp[left][right] = min(dp[left][right], dp[left][k] + dp[k + 1][right] + dim[left] * dim[k + 1] * dim[right + 1]);
				}
			}
		}
	}
	return dp[1][N];
}
int main() {
	read();
	g << get_min_operations();
	return 0;
}