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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;
int main(){
	std::vector<unsigned int> items;
	std::vector<unsigned int> backpacks;
	unsigned int backpack = 0;
	unsigned int used = 0;
	unsigned int n, m;

	scanf("%u", &n);
	scanf("%u", &m);

	while(n--){
		unsigned int temp;
		scanf("%u", &temp);

		items.push_back(temp);
	}

	while(m--){
		unsigned int temp;
		scanf("%u", &temp);

		backpacks.push_back(temp);
	}

	sort(backpacks.begin(), backpacks.end());
	sort(items.begin(), items.end());

	vector<unsigned int>::iterator it;


	for(it = backpacks.begin(); it != backpacks.end(); it++){

		if(!items.size()){
			break;
		}

		backpack = (*it);
		used++;

		vector<unsigned int>::iterator item;
		for(item = items.begin(); item != items.end();){
			if(backpack >= (*item)){
				backpack -= *item;
				
				item = items.erase(item);
				if(item == items.end())
					break;
			}else{
				item++;
			}
		}

	}

	if(items.size()){
		printf("NIE\n");
	}else{
		printf("%u\n", used);
	}

	return 0;
}