Cod sursa(job #613405)

Utilizator mytzuskyMihai Morcov mytzusky Data 24 septembrie 2011 10:48:13
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <stdio.h>
#define INF 0x3f3f3f
using namespace std;

int n,d[10001],m[501][501];

void citire()
{
    freopen("podm.in","r",stdin);
    scanf ("%d",&n);
    for (int i=0;i<=n;i++)
        scanf ("%d",&d[i]);
    for (int i=0;i<=n;i++)
        for (int j=0;j<=n;j++)
        {
            m[i][j]=INF;
            if (i==j)
                m[i][j]=0;
        }

}
void afis(int i,int j)
{
    if (i==j)
    {
        cout<<(char)(i+64);

    }
    else
    {
        cout<<"(";
        afis(m[i][j],j);
        afis(i,m[i][j]+1);
        cout<<")";
    }

}
void rez()
{
    freopen ("podm.out","w",stdout);
    for (int y=2;y<=n;y++)
        for (int i=1,j=y;i<n;j++,i++)
        {
            int minn=INF,poz;
            for (int k=i;k<j;k++)
            {
                int s=m[i][k]+m[k+1][j]+d[i-1]*d[k]*d[j];
                if (minn>s)
                    minn=s,poz=k;

            }

            m[i][j]=minn;
            m[j][i]=poz;
        }
    cout<<m[1][n]<<"\n";
    //afis(n,1);
}
int main()
{
    citire();
    rez();
    return 0;
}