#2597. 垃圾装袋(慈溪2016第3题)

垃圾装袋(慈溪2016第3题)

Description

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

Input Format

    输入文件rubbish.in:输入从文件中读取,输入共3行。
    第1行两个正整数 n和m,表示需要处理n堆垃圾,现在有m个垃圾袋。
    第2行n个整数,依次表示每堆垃圾的容量。
    第3行m个整数,依次表示每个垃圾袋的容量。

Output Format

    输出文件rubbish.out:结果输出到文件中,输出共1行。
    输出一个整数,如果能将所有的垃圾装入已有的袋子,则输出用掉的垃圾袋最少值多少钱?如果无法将所有的垃圾装入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。

Source

排序 贪心