#2597. 垃圾装袋(慈溪2016第3题)
垃圾装袋(慈溪2016第3题)
Description
某城市环卫部门需要对分布在城市中不同地点的n堆(编号为1到n)垃圾进行装袋处理。现在有m个(编号为1到m)垃圾袋可以使用。一个容量为v的垃圾袋能装入不超过容量为v的垃圾,一堆垃圾要求只能用一个垃圾袋来装,一个垃圾袋也只能用来装一堆垃圾(即一个垃圾袋不能在两个地方装垃圾)。一个垃圾袋的价格是由垃圾袋的容量来决定,容量为v的垃圾袋价格为v。
请编程帮环卫部门计算要将n堆垃圾全部装袋,用掉的垃圾袋最少值多少钱?
Input Format

第1行两个正整数 n和m,表示需要处理n堆垃圾,现在有m个垃圾袋。
第2行n个整数,依次表示每堆垃圾的容量。
第3行m个整数,依次表示每个垃圾袋的容量。
Output Format

输出一个整数,如果能将所有的垃圾装入已有的袋子,则输出用掉的垃圾袋最少值多少钱?如果无法将所有的垃圾装入m个袋子,则输出"-1"。
3 4
3 6 4
4 5 7 3
14
Hint
【输入样例1】3 4
3 6 4
4 5 7 3
【输出样例1】
14
【样例1解释】
有 3堆垃圾,4个袋子,第 1堆容量为3的垃圾用第 4 个容量为3的袋子装,第 2堆容量为6的垃圾用第3个容量为7的袋子装, 第 3堆容量为4的垃圾用第1个容量为4的袋子装,所以用掉的垃圾袋最少值 3+7+4=14。
【输入样例2】
3 2
5 7 2
4 8
【输出样例2】
-1
【样例2解释】
有 3堆垃圾,2个袋子,由于垃圾袋数量少于垃圾堆数,所以不可能将垃圾全部装入袋子,故输出“-1”。
【输入样例3】
2 3
5 7
1 5 2
【输出样例3】
-1
30%的测试点输入数据保证l<=n,m<=1000
70%的测试点输入数据保证 1<=n,m<=10000
100%的测试点输入数据保证 1<=n,m<=50000,每个垃圾袋的容量和每处垃圾的容量不超过10000。