#include<cstdio> #include<algorithm> int i, nr, n, m, liczba, wynik, t[26], w[101], plecak[101]; void rek() { nr++; if(nr == n){wynik = std::min(wynik, liczba);nr--;return;} for(int i = 0; i < m; i++) { if (plecak[i] >= t[nr]) { plecak[i] -= t[nr]; if (w[i] == 0){liczba++;w[i] = 1; rek(); w[i] = 0;liczba--;} else{rek();} plecak[i] += t[nr]; } } nr--; } int main() { scanf("%d%d", &n, &m); for(i = 0; i < n; i++) { scanf("%d", &t[i]); } for(i = 0; i < m; i++) { scanf("%d", &plecak[i]); } liczba = 0; wynik = 999999999; nr = -1; rek(); printf("%d\n", wynik); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include<cstdio> #include<algorithm> int i, nr, n, m, liczba, wynik, t[26], w[101], plecak[101]; void rek() { nr++; if(nr == n){wynik = std::min(wynik, liczba);nr--;return;} for(int i = 0; i < m; i++) { if (plecak[i] >= t[nr]) { plecak[i] -= t[nr]; if (w[i] == 0){liczba++;w[i] = 1; rek(); w[i] = 0;liczba--;} else{rek();} plecak[i] += t[nr]; } } nr--; } int main() { scanf("%d%d", &n, &m); for(i = 0; i < n; i++) { scanf("%d", &t[i]); } for(i = 0; i < m; i++) { scanf("%d", &plecak[i]); } liczba = 0; wynik = 999999999; nr = -1; rek(); printf("%d\n", wynik); return 0; } |