Cod sursa(job #690466)

Utilizator andra23Laura Draghici andra23 Data 25 februarie 2012 17:32:22
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<iostream>
#include<fstream>

using namespace std;

const int MAXN = 505;
const long long INF = 1000000000000000001LL;
int d[MAXN];
long long dp[MAXN][MAXN];

int main() {
	ifstream f("podm.in");
	ofstream g("podm.out");
	
	int n;
	f >> n;
	for (int i = 1; i <= n+1; i++) {
		f >> d[i];
	}

	//cout << INF << endl;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			dp[i][j] = INF;
		}
	}
	
	for (int i = 1; i <= n; i++) {
		dp[i][i] = 0;
		dp[i][i+1] = (long long)d[i]*d[i+1]*d[i+2];
	}

	for (int j = 2; j <= n-1; j++) {
		for (int i = 1; i <= n && i+j <= n; i++) {
			for (int k = 0; k <= j-1; k++) {
				dp[i][i+j] = min(dp[i][i+j], dp[i][i+k] + dp[i+k+1][i+j] + d[i]*d[i+k+1]*d[i+j+1]);
			}
		}
	}

	g << dp[1][n] << '\n';

	return 0;
}