Rezolvare completă PbInfo #3170 Plata3

Cerința

Se consideră n tipuri de bancnote, cu valorile v[1] v[2] ... v[n], ordonate strict crescător. Se cere să se determine o modalitate de a plăti integral o sumă dată S cu bancnotele disponibile, știind că se pot folosi oricâte bancnote de orice tip.

Date de intrare

Programul citește de la tastatură numerele n și S, apoi valorile v[1] v[2] ... v[n] ale bancnotelor.

Date de ieșire

Programul va afișa pe ecran n numere, reprezentând o modalitate de plată a sumei S. Fiecare număr x[i] va reprezenta numărul de bancnote de valoarea x[i] folosite pentru plata sumei S.

Restricții și precizări

  • 1 ≤ n ≤ 6
  • 1 ≤ S ≤ 1000
  • 1 ≤ v[i] ≤ 100
  • oricare variantă corectă de plată a sumei S va fi luată în considerare
  • pentru toate seturile de date există soluție

Exemplu

Intrare

5 375
1 5 10 50 100

Ieșire

5 2 1 1 3 

Observații

Există și alte soluții valide.

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 Plata3:

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;


ofstream fout("output.txt");

int n , S, v[10], x[10], gasit = false;

void Afis(int k, ostream & out)
{
    gasit = true;
    for(int i = 1 ; i <= k ; i ++)
        out << x[i] << " ";
    out << "
";
}

void back(int k, int sum)
{
    if(k <= n)
        for(int i = 0 ; i <= (S - sum) / v[k] && !gasit ; i ++)
        {
            x[k] = i;
            if(sum + x[k] * v[k] == S)
                Afis(n, cout);
            else
                back(k + 1 , sum + x[k] * v[k]);
        }
}

int main()
{
    cin >> n >> S;
    for(int i = 1 ; i <= n ; ++i)
        cin >> v[i];
    back(1, 0);
    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 Adresa de email.

Rezolvarea problemei #3170 Plata3

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3170 Plata3 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!