Estalviant electricitat X86969


Statement
 

pdf   zip

Teniu al vostre càrrec la gestió de la producció de farina en una indústria farinera. Cal produir dd kilograms de farina, tasca per a la qual es disposa de nn molins. En una hora, el molí ii-èsim pot produir pip_{i} kg de farina, i consumeix cic_{i} kWh (kilowatts hora). A més, cada molí té una autonomia de uiu_{i} hores, i no pot estar en funcionament més temps per raons de manteniment. Amb els preus actuals de l’energia, és primordial minimitzar el consum elèctric. Podeu dissenyar un pla de producció òptim?

Per exemple, suposem que per a produir 35003500 kg de farina tenim dos molins tals que:

  • el primer en una hora produeix 5050 kg de farina i consumeix 10 kWh, i pot funcionar fins a 2020 hores.

  • el segon en una hora produeix 7575 kg de farina i consumeix 10 kWh, i pot funcionar fins a 4040 hores.

Com que el segon molí consumeix el mateix que el primer però produeix més farina, aleshores un pla òptim consisteix en fer servir el segon molí durant 4040 hores i el primer durant 1010 hores, fabricant així 4075+1050=350040 \cdot 75 + 10 \cdot 50 = 3500 kg de farina amb un consum elèctric total de 4010+1010=50040 \cdot 10 + 10 \cdot 10 = 500 kWh.

Entrada

L’entrada consisteix en diversos casos. Cada cas comença amb nn, el nombre de molins, seguit de nn enters positius uiu_{i}, seguit de nn enters positius pip_{i}, seguit de nn enters positius cic_{i}, els quals representen l’autonomia, la productivitat i el consum de cadascun dels molins, respectivament. El cas acaba amb un enter dd, que representa la demanda de farina. Podeu assumir que 1n1041 \leq n \leq 10^{4}, que 1ui,pi,ci1001 \leq u_{i}, p_{i}, c_{i} \leq 100 per tot 0in10 \leq i \leq n-1, i que 0di=0n1uipi0 \leq d \leq \sum_{i=0}^{n-1} u_{i} \cdot p_{i} (és a dir, segur que la demanda es pot satisfer).

Sortida

Per cada cas, escriviu amb quatre dígits decimals el consum mínim d’electricitat per tal de poder satisfer la demanda de farina.

Observació

Per escriure un double amb quatre dígits decimals podeu fer-ho així:

int main() {
  cout.setf(ios::fixed);
  cout.precision(4);
  double x;
  ...
  cout << x << endl;

Si us cal, podeu repassar com usar la funció sort per a ordenar un vector seguint un ordre ad-hoc aquí: https://xuleta.jutge.org/stl/sort.html

Public test cases
  • Input

    2
    20 40
    50 75
    10 10
    3500
    
    3
    1 3 2 
    5 2 3 
    7 3 4
    10
    
    4
    1 2 1 2
    1 2 3 4
    2 3 4 5
    14
    

    Output

    500.0000
    13.6000
    18.5000
    
  • Information
    Author
    Enric Rodríguez
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++ Python