Cod sursa(job #3261913)

Utilizator andrei_aramaArama Andrei Robert andrei_arama Data 7 decembrie 2024 19:12:32
Problema Parantezare optima de matrici Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <climits>
using namespace std;

ifstream cin("podm.in");
ofstream cout("podm.out");

const int NMAX=501;
int n;
int dp[NMAX][NMAX];
struct mat
{
    int cols, rows;
} mats[NMAX];
int main()
{
    cin>>n;
    int last;
    cin>>last;
    int current;
    for (int i = 1; i <= n; i++) {
        cin >> current;
        mats[i].rows = last;
        mats[i].cols = current;
        last = current;
    }

    for(int lg=1;lg<=n;lg++)
        for(int i=1;i<=n-lg+1;i++)
        {
            int j=i+lg-1;
            if(lg==1)
            {
                dp[i][j]=0;
            }
            else if(lg==2)
            {
                dp[i][j]=mats[i].rows*mats[i].cols*mats[j].cols;
            }
            else
            {
                dp[i][j]=INT_MAX;
                for(int k=i;k<j;k++)
                {
                    dp[i][j]=min(dp[i][k]+dp[k+1][j]+mats[i].rows*mats[k].cols*mats[j].cols, dp[i][j]);
                }
            }
        }
    cout<<dp[1][n];
    return 0;
}