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
#include <cstdio>
#include <algorithm>
using namespace std;

int main(void){
    int n, m;
    scanf("%d %d", &n, &m);
    int a[24];
    bool zabrany[24];
    int c[100];
    for (int i=0; i<n; i++){
        scanf("%d", a+i);
        zabrany[i]=false;
    }
    for (int i=0; i<m; i++)
        scanf("%d", c+i);
    sort(a, a+n, greater < int > () );
    sort(c, c+m, greater < int > () );
    int zliczPlecaki=0;
    int ileJeszczePrzedmiotow=n;
    while (true){
        for (int i=0; i<n; i++)
            if (!zabrany[i] && a[i]<=c[zliczPlecaki])
            {
                zabrany[i]=true;
                c[zliczPlecaki]-=a[i];
                ileJeszczePrzedmiotow--;
            }
        if (ileJeszczePrzedmiotow>0)
            zliczPlecaki++;
        else
        {
            printf("%d\n", zliczPlecaki+1);
            return 0;
        }
        if (zliczPlecaki>=m){
            printf("NIE\n");
            return 0;
        }
    }
}