Cod sursa(job #2005363)

Utilizator DavidLDavid Lauran DavidL Data 26 iulie 2017 20:44:32
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#define MAXN 505
#define LL long long
using namespace std;
ifstream fi("podm.in");
ofstream fo("podm.out");

LL dp[MAXN][MAXN],x[MAXN];
int n;
int main()
{
    fi>>n;
    for (int i=0; i<=n; i++)
        fi>>x[i];
    ///completam pe diagonala
    ///d=0 => dp[i][i]=0
    ///d=1
    for (int i=1; i<n; i++)
        dp[i][i+1]=x[i-1]*x[i]*x[i+1];
    for (int d=2; d<n; d++)
        for (int i=1; i+d<=n; i++)
        {
            dp[i][i+d]=dp[i][i]+dp[i+1][i+d]
                    +x[i-1]*x[i]*x[i+d];
            for (int k=i+1; k<i+d; k++)
                dp[i][i+d]=min(dp[i][i+d],
                               dp[i][k]+dp[k+1][i+d]+x[i-1]*
                               x[k]*x[i+d]);
        }
    fo<<dp[1][n];
    fi.close();
    fo.close();
    return 0;
}