#gqrm403. 3. 垃圾装袋( rubbish. cpp)
3. 垃圾装袋( rubbish. cpp)
Description
某城市环卫部门需要对分布在城市中不同地点的n堆(编号为1到n)垃圾进行装袋处理。现在有m个(编号为1到m) 垃圾袋可以使用。
一个容量为v的垃圾袋能装入不超过容量为 v的垃圾,一堆垃圾要求只能用一个垃圾袋来装,一个垃圾袋也只能用来装一堆垃圾(即一个垃圾袋不能在两个地方装垃圾)。一个垃圾袋的价格是由垃圾袋的容量来决定,容量为v的垃圾袋价格为v。
请编程帮环卫部门计算要将 n堆垃圾全部装袋,用掉的垃圾袋最少值多少钱?
Format
Input
输入共 3行。
第1行两个正整数n和m,表示需要处理n堆垃圾,现在有m个垃圾袋。
第2行n个整数,依次表示每堆垃圾的容量。
第3行m个整数,依次表示每个垃圾袋的容量。
Output
输出共1行。
输出一个整数,如果能将所有的垃圾装入已有的袋子,则输出用掉的垃圾袋最少值多少钱? 如果无法将所有的垃圾装入m个袋子,则输出“-1”。
Samples
3 4
3 6 4
4 5 7 3
14
3 2
5 7 2
4 8
-1
2 3
5 7
1 5 2
-1
Limitation
30%的测试点输入数据保证1≤n, m≤1000。
70%的测试点输入数据保证 1≤n, m≤10000。
100%的测试点输入数据保证 1≤n,m≤50000,每个垃圾袋的容量和每处垃圾的容量不超过10000。