Cod sursa(job #1617886)

Utilizator Balescu_OvidiuBalescu Ovidiu-Gheorghe Balescu_Ovidiu Data 27 februarie 2016 17:01:01
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#include <stdlib.h>

int main(){
	unsigned n,*dim;
	unsigned long **m;
	FILE*f=fopen("podm.in","r");
	fscanf(f,"%u",&n);
	dim=(unsigned*)malloc(sizeof(unsigned)*(n+1));
	for(unsigned i=0;i<=n;i++)
		fscanf(f,"%u",&dim[i]);
	fclose(f);
	m=(unsigned long**)malloc(sizeof(unsigned long)*n);
	for(unsigned i=0;i<n;i++){
		m[i]=(unsigned long*)malloc(sizeof(unsigned long)*n);
		for(unsigned j=0;j<n;j++)
			m[i][j]=0;
	}
	for(unsigned i=0;i<n-1;i++)
		m[i][i+1]=dim[i]*dim[i+1]*dim[i+2];
	for(unsigned d=0;d<n-1;d++)
		for(unsigned i=0;i+d<n;i++){
			m[i][i+d]=50000000;
			for(unsigned k=i;k<i+d-1;k++){
				unsigned long min=m[i][k]+m[k+1][i+d]+dim[i]*dim[k]*dim[i+d];
				if(m[i][i+d]<min)
					m[i][i+d]=min;
			}
		}
	for(unsigned i=0;i<n;i++){
		for(unsigned j=0;j<n;j++)
			printf("%lu ",m[i][j]);
		printf("\n");
	}
	FILE*g=fopen("podm.out","w");
	fprintf(g,"%lu",m[0][n-1]);
	fclose(g);
	system("PAUSE");
    return 0;
}