Donada una seqüència de nombres reals positius , , …, , considerem les expressions aritmètiques que es poden formar amb sumes i productes usant tots aquests nombres (potser afegint parèntesis) sense canviar-ne l’ordre relatiu.
Per exemple, si i la seqüència és , aleshores algunes d’aquestes expressions són (ometem els parèntesis quan és possible per llegibilitat):
0.5
0.5
El nostre objectiu és calcular el nombre més gran que es pot obtenir avaluant aquestes expressions. Per exemple, si la seqüència és , aquest nombre és i s’obté amb l’expressió . Si en canvi la seqüència és , aleshores el màxim és i s’obté amb .
L’entrada consisteix en diversos casos. Cada cas comença amb , seguit de , , …, . Podeu assumir que i que .
Per cada cas, escriviu amb quatre dígits decimals el nombre més gran que es pot obtenir avaluant les expressions que es poden formar amb sumes i productes i tots els nombres , , …, sense canviar-ne l’ordre relatiu.
Resoleu aquest problema amb programació dinàmica.
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;
Input
3 2.0 3.0 4.0 3 0.2 0.3 0.4 4 1.0 2.0 3.0 4.0 4 0.1 2.5 3.0 2.2 5 0.3 1.0 0.5 0.3 2.0
Output
24.0000 0.9000 36.0000 17.1600 4.2000