Cod sursa(job #2553557)

Utilizator PaterucAPetruc Andrei Stefan PaterucA Data 22 februarie 2020 09:44:18
Problema Parantezare optima de matrici Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, v[510];
long long s[510][510];

long long sol(int ,int );

int main()
{
    inf>>n;
    for(int i=0; i<=n; i++)
        inf>>v[i];
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            s[i][j]=1e18;
    for(int i=1; i<=n; i++)
    {
        s[i][i]=0;
        if(i<n)
            s[i][i+1]=v[i-1]*v[i]*v[i+1];
    }
    for(int i=1; i<n; i++)
    {
        for(int j=i+2; j<=n; j++)
        {
            if(s[i][j]!=1e18)
                continue;
            for(int k=i; k<j; k++)
            {
                s[i][j]=min(s[i][j], sol(i,k)+sol(k+1,j)+v[i-1]*v[k]*v[j]);
            }
        }
    }
    outf<<s[1][n];
    return 0;
}

long long sol(int x, int y)
{
    if(s[x][y]!=1e18)
        return s[x][y];
    for(int k=x; k<y; k++)
    {
        s[x][y]=min(s[x][y], sol(x,k)+sol(k+1,y)+v[x-1]*v[k]*v[y]);
    }
    return s[x][y];
}