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ţă
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
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
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
4 <= N <= 1000
- Numerele date sunt numere naturale între
1
şi10000
Exemplu
expresie8.in
5 4 7 1 5 3
expresie8.out
44
Explicație
Valoarea maximă se obţine prin aşezarea operaţiilor sub forma: 4 * 7 + 1 + 5*3
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Expresie8:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("expresie8.in");
ofstream fout("expresie8.out");
int n,v[1001];
int main(){
fin>>n;
long long int s = 0, Max=0;
for(int i=1;i<=n;++i)
fin>>v[i], s+=v[i];
for(int i=1;i<=n-2;++i){
long long int cc = s-v[i]-v[i+1]-v[i+2]+(long long)v[i]*v[i+1]*v[i+2];
if(cc>Max)
Max = cc;
}
for(int i=1;i<=n-3;++i)
for(int j=i+2;j<=n-1;++j){
long long int 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<<Max<<endl;
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1096 Expresie8
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1096 Expresie8 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!