#O3046. 慈溪.2016.03.垃圾装袋(rubbish)

慈溪.2016.03.垃圾装袋(rubbish)

题目描述

某城市环卫部门需要对分布在城市中不同地点的 n 堆(编号为 1 到 n )垃圾进行装袋处 理。现在有 m 个(编号为 1 到 m )垃圾袋可以使用。

一个容量为 v 的垃圾袋能装入不超过容量为 v 的垃圾,一堆垃圾要求只能用一个垃圾 袋来装,一个垃圾袋也只能用来装一堆垃圾(即一个垃圾袋不能在两个地方装垃圾)。一个垃圾袋的价格是由垃圾袋的容量来决定,容量为 v 的垃圾袋价格为 v。

请编程帮环卫部门计算要将 n 堆垃圾全部装袋,用掉的垃圾袋最少值多少钱?

输入格式

共 3 行:

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

第 3 行 m 个整数,依次表示每个垃圾袋的容量。

数据范围

30% 的测试点输入数据保证 1 ≤ n , m ≤ 1000

70% 的测试点输入数据保证 1 ≤ n , m ≤ 10000

100% 的测试点输入数据保证 1 ≤ n , m ≤ 50000 ,每个垃圾袋的容量和每处垃圾的容量 不超过 10000 。

输出格式

一个整数,如果能将所有的垃圾装入已有的袋子,则输出用掉的垃圾袋最少值多少钱?如果无法将所有的垃圾装入 m 个袋子,则输出 “-1” 。

样例

3 4
3 6 4
4 5 7 3
14

样例解释

有 3 堆垃圾, 4 个袋子,第 1 堆容量为 3 的垃圾用第 4 个容量为 3 的袋子装,第 2 堆容量为 6 的垃圾用第 3 个容量为 7 的袋子装,第 3 堆容量为 4 的垃圾用第 1 个容量为 4 的袋子 装,所以用掉的垃圾袋最少值 3+7+4=14 。