Cod sursa(job #3251442)

Utilizator rotti321Rotar Mircea rotti321 Data 26 octombrie 2024 05:58:22
Problema Parantezare optima de matrici Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
using namespace std;
ifstream f("podm.in");
ofstream g("podm.out");
int n,i,j,k;
long long d[501],dp[501][501];

    // dp[i][j] = numărul MINIM înmulțiri scalare cu codare, poate fi calculat produsul
    //            matriceal M_i * M_i+1 * ... * M_j

    // Cazul de bază 2: matrice d[i - 1] x d[i] înmulțită cu matrice d[i] x d[i + 1]
    // (matrice pe poziții consecutive)


int main()
{
    f>>n;
    for(i=0;i<=n;++i) f>>d[i];
    for(i=1;i<n;++i)
        for(j=i+1;j<=n;++j)
        {
            dp[j-i][j]=1LL<<60;
            for(k=j-i;k<j;++k)
                dp[j-i][j]=min(dp[j-i][j],dp[j-i][k]+dp[k+1][j]+d[j-i-1]*d[k]*d[j]);
        }
    // Rezultatul se află în dp[1][n]: Numărul MINIM de inmultiri scalare
    // pe care trebuie să le facem pentru a obține produsul M_1 * ... * M_n
    g<<dp[1][n];
    return 0;
}