Cod sursa(job #2469046)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 6 octombrie 2019 14:29:34
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>

const int MAXN = 500 + 5;

using namespace std;

typedef long long ll;

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

int n;
ll dp[MAXN][MAXN],dimensiune[MAXN];

int main()
{
    in>>n;
    for(int i = 1; i <= n + 1; i++)
        in>>dimensiune[i];
    for(int i = 1; i <= n; i++){
        dp[i][i] = 0;
        dp[i][i + 1] = dimensiune[i] * dimensiune[i + 1] * dimensiune[i + 2];
    }

    ///dp[i][i + ceva] = dp[i][j] + dp[j + 1][i + ceva] + dimensiune[i] * dimensiune[j + 1] * dimensiune[j + ceva + 1]
    for(int ceva = 2; ceva <= n - 1; ceva ++){
        for(int i = 1; i + ceva <= n; i++){
            dp[i][i + ceva] = 2e18;
            for(int j = i; j <= i + ceva - 1; j++){
                dp[i][i + ceva] = min(dp[i][i + ceva],dp[i][j] + dp[j + 1][i + ceva] + dimensiune[i] * dimensiune[j + 1] * dimensiune[i + ceva + 1]);
            }
        }
    }
    out<<dp[1][n];
    return 0;
}