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]; }