Cod sursa(job #2740490)

Utilizator bogdan22000bogdan mica bogdan22000 Data 13 aprilie 2021 12:52:49
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
using namespace std;
	
ifstream fin ("podm.in");
ofstream fout("podm.out");
// constanta modulo folosita in aceasta problema
#define MOD ((int)1e9 + 7)
const auto INF = std::numeric_limits<unsigned long long>::max();

unsigned long long solve_podm(int n,  vector<int> &d){
    vector<vector<unsigned long long>> dp(n+1,vector<unsigned long long > (n+1,INF));
    for(int i = 1; i <= n; i++){
        dp[i][i] = 0ULL; // 0 pe unsigned long
    }
    for(int i = 1 ; i < n;i++){
        dp[i][i+1] = 1ULL * d[i-1] * d[i] * d[i+1];
    }
    for(int len = 2; len <= n; ++len){
        for(int i = 1 ;i + len - 1 <= n; i++){
            int j = i + len - 1;
            for(int k = i ; k < j ;k++){
                unsigned long long sol = dp[i][k] + dp[k+1][j] + 1ULL * d[i-1]*d[k]*d[j];
                dp[i][j] = min(sol,dp[i][j]);
            }
        }
    }
    return dp[1][n];
}
int main(){
    unsigned long long n;
    std::vector<int> d[502];
    fin>>n;
    for(int i = 0; i <= n;i++){
        int x;
        fin>>x;
        d->push_back(x);
    }
    fout<<solve_podm(n,*d)<<'\n';  
    return 0;
}