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
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> obj,bag;
int space[25];
unsigned minbgs=110;

bool doshit(int need,unsigned item)
{
    for(int i=0;i<min(obj.size(),bag.size());++i)
    {
        if(space[i]>=obj[item])
        {
            if(item==obj.size()-1)
            {
                minbgs=max(need,i+1);
                return true;
            }
            space[i]-=obj[item];
            if(doshit(max(need,i+1),item+1))
                return true;
            space[i]+=obj[item];
        }
    }
    return false;
}

int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;++i)
    {
        int t;
        cin>>t;
        obj.push_back(t);
    }
    for(int i=0;i<m;++i)
    {
        int t;
        cin>>t;
        bag.push_back(t);
    }
    sort(obj.rbegin(),obj.rend());
    sort(bag.rbegin(),bag.rend());
    for(int i=0;i<n;++i)
        space[i]=bag[i];
    doshit(0,0);
    cout<<minbgs;
    return 0;
}