Cod sursa(job #923250)

Utilizator sebii_cSebastian Claici sebii_c Data 23 martie 2013 13:01:24
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <cstdio>
#include <cstring>

#include <algorithm>

using namespace std;

const int INF = 0x3f3f3f3f;
const int MAXN = 501;

int N;
int d[MAXN];
int m[MAXN][MAXN];

void solve()
{
    memset(m, INF, sizeof(m));

    for (int i = 1; i <= N; ++i)
        m[i][i] = 0;

    for (int p = 1; p < N; ++p)
        for (int i = 1; i + p <= N; ++i) {
            for (int k = i; k < i + p; ++k)
                m[i][i + p] = min(m[i][i + p], 
                        m[i][k] + m[k + 1][i + p] + 
                        d[i - 1] * d[k] * d[i + p]);
        }
}

int main()
{
    freopen("podm.in", "r", stdin);
    freopen("podm.out", "w", stdout);

    scanf("%d", &N);
    for (int i = 0; i <= N; ++i)
        scanf("%d", &d[i]);

    solve();
    printf("%d\n", m[1][N]);

    return 0;
}