Cod sursa(job #380196)

Utilizator mika17Mihai Alex Ionescu mika17 Data 5 ianuarie 2010 00:51:20
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;

typedef unsigned long long u64;
typedef struct matrix {
        
        u64 l,c;
        } matrix;

unsigned short N;
u64 PD[500][500];
matrix S[500];

ifstream f("podm.in");
ofstream g("podm.out");
     
int main() {
    
    f>>N;
    
    unsigned short i,j,k,t; 
    
    u64 d[501];
    for(i=0;i<=N;++i) f>>d[i];
    for(i=0;i<N;++i) S[i].l = d[i], S[i].c = d[i + 1];
    
    for(t = 1; t < N; ++t)
          for(i = 0,j = i + t; j < N; ++i,++j) {
                
                PD[i][j] = 0xFFFFFFFFFFFFFFFFll;
                for(k = i; k < j; ++k) {
   
                      PD[i][j] = min(PD[i][j],PD[i][k] + PD[k+1][j] + S[i].l*S[k].c*S[j].c); //S[k].c==S[k+1].l
                }
          }
    //for(i = 0;i < N; ++i) g<<S[i].l<<" "<<S[i].c<<"\n";
    g<<PD[0][N - 1];
    
    f.close();
    g.close();
    
    return 0;
}