//--------------------------------------------------------------------------- #include //--------------------------------------------------------------------------- FILE *Input,*Output; int *CostoMoneda,SumaTotal,Mitad,Minimo; ///****************************** int Absoluto(int X) { if( X < 0 ) { return -X; } return X; } ///****************************** void Checa(int N,int *Array) { int Temp,Suma,i; Suma = 0; for(i = 0; i < N; i++) { Suma += Array[i]*CostoMoneda[i]; } Temp = Absoluto(2*Suma-SumaTotal); if( Temp < Minimo ) { Minimo = Temp; Mitad = Suma; } } ///****************************** void CuentaBaseVariable(int N,int *Tope) { int i,Pos; int *Array = new int[N+1]; for(i = 0; i < N+1; i++) { Array[i] = 0; } Pos = 0; while( Pos < N ) { Checa(N,Array); Pos = 0; Array[Pos]++; while( Pos < N && Array[Pos] == Tope[Pos] ) { Array[Pos] = 0; Pos++; Array[Pos]++; } } delete[] Array; } ///****************************** int main(void) { int i,N,*Tope; Input = fopen("Input.txt","r+t"); Minimo = 36000; SumaTotal = 0; fscanf(Input,"%d",&N); Tope = new int[N]; CostoMoneda = new int[N]; for(i = 0; i < N; i++) { fscanf(Input,"%d",&Tope[i]); Tope[i]++; } for(i = 0; i < N; i++) { fscanf(Input,"%d",&CostoMoneda[i]); SumaTotal += ((Tope[i]-1)*CostoMoneda[i]); } fclose(Input); CuentaBaseVariable(N,Tope); Output = fopen("Output.txt","w+t"); fprintf(Output,"%d %d",Mitad,SumaTotal-Mitad); fclose(Output); return 0; } //---------------------------------------------------------------------------