325
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 ≤ 10000 ≤ G ≤ 100001 ≤ 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