Cod sursa(job #1201141)

Utilizator xtreme77Patrick Sava xtreme77 Data 24 iunie 2014 15:39:23
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <cstdio>
#define rint register int
#define min(a,b) (((a>b))?(b):(a))
#define max(a,b) (((a<b))?(b):(a))
const char IN[]="podm.in";
const char OUT[]="podm.out";
const int MAX = 514;
using namespace std;
int d[MAX],mat[MAX][MAX];
int main()
{
    int n;
    freopen(IN,"r",stdin);
    freopen(OUT,"w",stdout);
    scanf("%d",&n);
    for(rint i=0;i<=n;++i)scanf("%d",d+i);
    for(rint i=1;i<n;++i)mat[i][i+1]=d[i-1]*d[i]*d[i+1];
    for(rint q=2;q<n;++q){
        for(rint i=1;i<=n-q;++i){
            mat[i][i+q]=mat[i][i+q-1]+d[i-1]*d[i+q-1]*d[i+q];
            for(rint k=i;k<=i+q;++k){
                mat[i][i+q]=min(mat[i][i+q],mat[i][k]+mat[k+1][i+q]+d[i-1]*d[k]*d[i+q]);
            }
        }
    }
    printf("%d\n",mat[1][n]);
    return 0;
}