Cod sursa(job #2638960)

Utilizator HermioneMatei Hermina-Maria Hermione Data 30 iulie 2020 18:14:05
Problema Parantezare optima de matrici Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;
unsigned long long **m;
int solve(vector<int> d)
{
    int n=d.size()-1;
    for(int i=0; i<n-1; i++)
    {
        m[i][i]=0;
        m[i][i+1]=d[i]*d[i+1]*d[i+2];
    }
    m[n-1][n-1]=0;

    for(int k=2; k<n; k++)
    {
        for(int i=0; i<=n-k-1; i++)
        {
            unsigned long long mn=ULLONG_MAX;
            for(int j=i+1; j<=i+k; j++)
            {
                unsigned long long cost;
                cost=m[i][j-1]+m[j][i+k]+d[i]*d[j]*d[i+k+1];///i+k+1???
                mn=min(mn, cost);
            }
            m[i][i+k]=mn;
        }
    }
    return m[0][n-1];
}
int main()
{
    ifstream f("podm.in");
    ofstream g("podm.out");
    int n;
    vector<int> d;
    f>>n;
    d.resize(n+1);
    for(int i=0; i<n+1; i++)
        f>>d[i];

    m=(unsigned long long**)malloc(n*sizeof(unsigned long long*));
    for(int i=0; i<n; i++)
        m[i]=(unsigned long long*)malloc(n*sizeof(unsigned long long));
    g<<solve(d);
    for(int i=0; i<n; i++)
        free(m[i]);
    free(m);
    f.close();
    g.close();
    return 0;
}