fbpx

Problema #1959 – Rucsac_Halloween – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Sabin merge la colindat de Halloween. Ştiind ca poate colinda la n case, iar la fiecare primeşte g[1], g[2], ..., g[n] bomboane, iar în rucsacul lui încap G bomboane, aflaţi numărul minim de case pe care trebuie să le colinde Sabin pentru a umple ghiozdanul.

Date de intrare

Programul citeşte de la tastatură numerele n, G şi numerele g[1], g[2], ..., g[n].

Date de ieșire

Programul va afișa pe ecran numărul de case. Dacă nu poate să umple ghiozdanul, se va afişa mesajul NU.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • 0 ≤ G ≤ 10000
  • 1 ≤ g[1], g[2], ..., g[n] ≤ G

Exemplu

Intrare

5 8
1 2 7 3 4

Ieșire

2

Explicație

Sabin poate colinda la casele 1 şi 3 pentru a umple ghiozdanul.

#include <bits/stdc++.h>
using namespace std;
#define inf 1005
int g[1001];
int n , nrc[10002] , G;


int main()
{
    cin >> n >> G;
    for(int i = 1 ; i <= n ; i++)
        cin >> g[i];
    
    for(int i = 1 ; i <= G ; i++)
        nrc[i] = inf;
    
    for(int i = 1 ; i <= n ; i++)
        for(int j = G ; j >= g[i] ; j--)
            if(nrc[j] > nrc[j - g[i]] + 1) nrc[j] = nrc[j - g[i]] + 1;
        
    if(nrc[G] == inf) cout << "NU";
    else cout << nrc[G];

}
Comentarii

S-ar putea sa iti placa