Cod sursa(job #3292064)

Utilizator MAT696912Tudor Andrei MAT696912 Data 7 aprilie 2025 00:01:02
Problema Parantezare optima de matrici Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <limits>

using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");

int main()
{
	int n;
	
	fin >> n;
	vector<int> p(n + 1);
	for (int i = 0; i < n + 1; i++) {
		fin >> p[i];
	}

	vector<vector<unsigned long long>> dp(n + 1, vector<unsigned long long>(n + 1));
	vector<vector<unsigned long long>> s(n + 1, vector<unsigned long long>(n + 1));

	for (int i = 1; i <= n; i++) {
		dp[i][i] = s[i][i] = 0;
	}

	for (int l = 1; l <= n - 1; l++) {
		for (int i = 1; i <= n - l; i++) {
			int j = i + l;
			
			dp[i][j] = ULLONG_MAX;
			for (int k = i; k <= j - 1; k++) {
				unsigned long long q = dp[i][k] + dp[k + 1][j] + p[i - 1] * p[k] * p[j];
				if (q < dp[i][j]) {
					dp[i][j] = q;
					s[i][j] = k;
				}
			}
		}
	}

	fout << dp[1][n];

}