1096 - Expresie 8
Costel are de rezolvat o temă grea la matematică: având la dispoziţie N
numere naturale nenule trebuie să aşeze între acestea 2
operaţii de înmulţire şi N-3
operaţii de adunare, astfel încât rezultatul calculelor să fie cel mai mare posibil. Nu este permisă modificarea ordinii numerelor date.
De exemplu, dacă N=5
şi numerele sunt 4
, 7
, 1
, 5
, 3
, operaţiile pot fi aşezate 4+7*1+5*3
, 4*7*1+5+3
, e.t.c
Cerinţă[edit | edit source]
Scrieţi un program care să aşeze două operaţii de înmulţire şi N-3
operaţii de adunare între cele N
valori date astfel încât valoarea expresiei obţinute să fie maximă.
Date de intrare[edit | edit source]
Fișierul de intrare expresie8.in
are următoarea structură:
- Pe prima linie se află un număr natural
N
, reprezentând numărul elementelor date. - Pe următoarele linii se află cele
N
numere naturale date, fiecare pe câte o linie.
Date de ieșire[edit | edit source]
Fișierul de ieșire expresie8.out
va conține pe prima linie valoarea maximă obţinută prin evaluarea expresiei.
Restricții și precizări[edit | edit source]
4 <= N <= 1000
- Numerele date sunt numere naturale între
1
şi10000
Exemplu:[edit | edit source]
expresie8.in
5 4 7 1 5 3
expresie8.out
44
Explicație[edit | edit source]
Valoarea maximă se obţine prin aşezarea operaţiilor sub forma: 4 * 7 + 1 + 5*3
.
Încărcare soluție[edit | edit source]
Lipește codul aici[edit | edit source]
<syntaxhighlight lang="python" line="1"> with open("expresie8.in", "r") as fin, open("expresie8.out", "w") as fout:
n = int(fin.readline()) v = list(map(int, fin.readline().split())) s = 0 Max = 0 for i in range(1, n+1): s += v[i] for i in range(1, n-1): cc = s - v[i] - v[i+1] - v[i+2] + (v[i] * v[i+1] * v[i+2]) if cc > Max: Max = cc for i in range(1, n-2): for j in range(i+2, n): cc = s - v[i] - v[i+1] - v[j] - v[j+1] + (v[i] * v[i+1]) + (v[j] * v[j+1]) if cc > Max: Max = cc fout.write(str(Max) + "\n")
</syntaxhighlight>