
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
//freopen("test.txt", "rt", stdin);
int n, m;
cin >> n;
vector<int> wei(n);
for (int i = 0; i < n; i++)
{
cin >> wei[i];
}
cin >> m;
vector<int> box(m);
for (int i = 0; i < m; i++)
{
cin >> box[i];
}
sort(wei.begin(), wei.end(), greater<>());
sort(box.begin(), box.end(), greater<>());
if (wei[0] < box[0])
{
cout << -1;
return 0;
}
int craincount = wei.size();
int boxcount = box.size();
int ans = 0;
while (1)
{
if (box[0] <= 0)
{
cout << ans;
return 0;
}
int usecrainidx = 0;
for (int targetboxidx = 0; targetboxidx < boxcount; targetboxidx++)
{
if (usecrainidx >= craincount)
{
break;
}
if (wei[usecrainidx] >= box[targetboxidx])
{
box[targetboxidx] -= wei[usecrainidx];
usecrainidx++;
}
}
sort(box.begin(), box.end(), greater<>());
ans++;
}
}
처음에는 문제를 잘못 읽어서 크레인의 무게제한만큼 박스의 수를 뺄 수 있다고 생각해서 코드를 짰고, 당연히 wa...
문제를 다시 읽어보니 각 박스는 하나이고 주어지는 숫자는 무게였다는 걸 알았고, sort 후 각 크레인에 대해서 무게제한 내에서 들 수 있는 가장 무거운 박스를 옮기는 시행을 box배열의 첫번째 값이 0 이하가 될 때까지 반복했다.
만약 첫 세팅하는 sort 후 크레인 배열의 0번인덱스 값이 박스 배열 0번인덱스 값보다 작다면 -1 출력.
