Cod sursa(job #854639)

Utilizator razvan.popaPopa Razvan razvan.popa Data 13 ianuarie 2013 20:07:44
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<iostream>
#include<fstream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<stack>
#include<bitset>
#include<algorithm>
#define infile "podm.in"
#define outfile "podm.out"
#define nxt (*it)
#define INF (1<<30)
#define nMax 505
#define FOR(g)\
   for(vector<int>::iterator it=g.begin(); it!=g.end(); ++it)
using namespace std;


long long M[nMax], DP[nMax][nMax];

int N;



void read(){
    ifstream f(infile);

    f >> N;

    for(int i=1; i<=N+1; ++i)
       f >> M[i];

    f.close();
}

void solve(){
    for(int l=2; l<=N; ++l){
        for(int i=1; i<=N-l+1; ++i){
            int j = i + l - 1;

            DP[i][j] = INF;
            for(int k=i+1; k<=j; ++k)
               DP[i][j] = min(DP[i][j], DP[i][k-1] + DP[k][j] + M[i] * M[k] * M[j+1]);
        }
    }

}

void print(){
    ofstream g(outfile);

    g << DP[1][N] << '\n';

    g.close();
}

int main(){
    read();
    solve();
    print();

    return 0;
}