Cod sursa(job #673226)

Utilizator razvan2006razvan brezulianu razvan2006 Data 4 februarie 2012 09:12:53
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#define nmax 505
#define ll long long

using namespace std;

ll dp[nmax][nmax];
int n;
ll c[nmax+1];

ifstream f("podm.in");
ofstream g("podm.out");

void citeste(){

    f>>n;

    for(int i=0; i<=n; ++i) f>>c[i];

}

ll minim(ll x, ll y){

    if (x < y ) return x;
    return y;

}

void rezolva(){

    for(int i=0; i<n; ++i)
        dp[i][i+1] = c[i-1] * c[i] * c[i+1];


    for(int nr=2; nr<=n; ++nr){//marimea intervalului [i,j]
        for(int i=1; i+nr<=n; ++i){//capatul stang
            int j=i+nr;//capatul drept
            dp[i][j] = 1000000000000000000000LL;
            for(int k=i; k<=j; ++k)//fixez taietura
                dp[i][j] = minim(dp[i][j], dp[i][k]+dp[k+1][j]+c[i-1]*c[k]*c[j]);
        }
    }

}

void scrie(){

    g<<dp[1][n];

}

int main(){

    citeste();
    rezolva();
    scrie();

    f.close();
    g.close();

    return 0;


}