Cod sursa(job #3290848)

Utilizator MihaiZ777MihaiZ MihaiZ777 Data 1 aprilie 2025 13:06:35
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <algorithm>
#include <iostream>
#include <queue>
#include <string>
#include <vector>
#include <fstream>
using namespace std;

#define fast_io ios::sync_with_stdio(0); cin.tie(0);
typedef long long ll;

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

const int MAXN = 505;
const long long INF = 0x3f3f3f3f3f3f3f3f;

int n;
long long v[MAXN]; 
long long dp[MAXN][MAXN];

void ReadData() {
    fin >> n;
    for (int i = 0; i <= n; i++) {
        fin >> v[i];
    }
}

void Solve() {
    for (int i = 1; i <= n; i++) {
        dp[i][i] = 0;
    }
    for (int i = 1; i < n; i++) {
        dp[i][i + 1] = v[i - 1] * v[i] * v[i + 1];
    }
    for (int dist = 2; dist < n; dist++) {
        for (int i = 1; i <= n - dist; i++) {
            int j = i + dist;
            dp[i][j] = INF;

            for (int k = i; k <= j; k++) {
                dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + v[i - 1] * v[k] * v[j]);
            }

        }
    }
    fout << dp[1][n] << '\n';
}

int main() {
    ReadData();
    Solve();
    return 0;
}