Cod sursa(job #380179)

Utilizator mika17Mihai Alex Ionescu mika17 Data 4 ianuarie 2010 23:24:40
Problema Parantezare optima de matrici Scor 20
Compilator c Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define min(a,b) ((a)<(b)?(a):(b))

typedef struct matrix {
        
        unsigned short l,c;
        } matrix;

unsigned short N;
int PD[500][500];
matrix S[500];
FILE *f,
     *g;

int main() {
    
    f = fopen("podm.in","rt"),g = fopen("podm.out","wt");
    
    fscanf(f,"%hu",&N);
    
    unsigned short i,j,k,t;
    fpos_t fpos; fgetpos(f,&fpos);
    for(i = 0; i < N; ++i) {
          
          fsetpos(f,&fpos);
          
          fscanf(f,"%hu",&S[i].l);
          fgetpos(f,&fpos);
          fscanf(f,"%hu",&S[i].c);
    }
    for(t = 1; t < N; ++t)
          for(i = 0,j = i + t; j < N; ++i,++j)
                for(k = i; k < j; ++k) {
                      
                      PD[i][j] = min(PD[i][j]?PD[i][j]:0x7FFF,PD[i][k] + PD[k+1][j] + S[i].l*S[k].c*S[j].c);//S[k].c==S[k+1].l
                }
    
    fprintf(g,"%d",PD[0][N - 1]);
    
    fclose(f);
    fclose(g);
    
    return 0;
}