Cerința
Fermierul Gigel are o livadă cu peri de forma unui triunghi dreptunghic cu laturile de câte n
peri fiecare și având perii organizați pe linii și coloane. Pe prima linie este un singur păr, pe a doua doi peri, etc. Pe ultima linie sunt n
peri. Pentru fiecare păr se cunoaște numărul de pere din el. Hoțul Dorel intră în livada lui Gigel prin colțul stânga jos, adică prin primul element al ultimei linii. El se poate deplasa paralel cu rândurile de peri, adică cu liniile, respectiv cu coloanele livezii. Astfel, dintr-o poziție aflată pe linia i
și coloana j
, Dorel poate merge pe linia i-1
și coloana j
sau pe linia i
și coloana j+1
. Ca să nu îl prindă Gigel, hoțul Dorel trebuie ia toate perele din perii de pe traseul pe care merge, să iasă pe la sfârșitul unei linii de peri și să fure un număr minim de pere (deoarece nu e lacom sau nu le poate duce și îl prinde Gigel).
Date de intrare
Fișierul de intrare livada_xi.in
conține pe prima linie numărul n
. Fiecare dintre următoarele n
linii conține câte o linie a triunghiului. Prima linie conține un număr, a doua linie conține 2
numere, etc. ultima linie n
, conține n
numere
Date de ieşire
Fișierul de ieșire livada_xi.out
va conține pe prima linie numărul S
, reprezentând cel mai mic număr de pere pe care le poate lua Dorel.
Restricții și precizări
1 ≤ n ≤ 100
- numărul de pere din fiecare păr este mai mic decât
1000
Exemplu
livada_xi.in
5 4 1 4 2 1 3 6 4 4 4 4 5 2 2 7
livada_xi.out
16
Explicație
16
se poate obține adunând numerele:
4 | ||||
1 | 4 | |||
2 | 1 | 3 | ||
6 | 4 | 4 | 4 | |
4 | 5 | 2 | 2 | 7 |
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 Livada_XI:
#include <fstream>
using namespace std;
ifstream fin("livada_xi.in");
ofstream fout("livada_xi.out");
int A[102][102],n;
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
fin>>A[i][j];
for(int i=n;i>=1;i--)
for(int j=1;j<=i;j++)
if(j==1) { if(i!=n) A[i][j]=A[i][j]+A[i+1][j]; }
else if(i==n) A[i][j]=A[i][j]+A[i][j-1];
else A[i][j]=A[i][j]+min(A[i][j-1],A[i+1][j]);
int min=1000000000;
for(int i=1;i<=n;i++)
if(A[i][i]<min) min=A[i][i];
fout<<min;
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 #3256 Livada_XI
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3256 Livada_XI 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!