bzoj#P2920. [Poi1998]How to pack containers

[Poi1998]How to pack containers

题目描述

工厂的产品要装入圆柱形盒子。所有的盒子都是一样的底,盒子的高是一个 22 的乘方的非负整数。例如,对一些 i0,1,2,i=0,1,2,\dots 其值等于 2i2^i,数字 ii(指数)称作盒子的尺寸。所有盒子包含一样的货物,但是它们价值可以不同,早期制作出的货物更便宜。管理者决定,最早的(最便宜的)货物应该首先卖出;在仓库里,货物要装入集装箱,集装箱也是圆柱形的;每个集装箱的直径比盒子的直径要大一点,这样,盒子很容易放进集装箱。集装箱的高度是一个非负的 22 的乘方。这个数称为集装箱的尺寸。为了安全的运输需要用盒子装满集装箱,即放进集装箱的盒子的高度总和必须等于这个集装箱的高度。一套集装箱送到仓库,检查仓库中的盒子是否能装满所有的集装箱,如果能,求装入集装箱中货物的最小价值。

例如,考虑有 55 个盒子的仓库,它们的大小及它们中货物的价值如下:

1 3
1 2
3 5
2 1
1 4

尺寸为 112222 个集装箱能够放入价值为 334455 的盒子,或者三个总价值为 99 的盒子,在仓库中,尺寸为 55 的集装箱不能装满盒子。

任务:

编写程序:

  1. 读入仓库中货物的描述(大小,价值)和集装箱的描述(提供几个多少尺寸的集装箱);
  2. 检查仓库中的货物能否装入集装箱,若能,求出装入集装箱中货物的最小价值;
  3. 将结果输出。

输入格式

  • 第一行有一个整数 nn,表示仓库中盒子总数;
  • 下面 nn 行每行有两个由空格分开的非负整数,它们描述每一个盒子,其中第一个数是盒子的尺寸,第二个数是盒子中货物的价值,尺寸不超过 10310^3,价值不超过 10410^4
  • 下一行有一个整数 qq,表示运输到仓库的集装箱数(提供的集装箱个数),再下面的 qq 行,每行有两个由空格分开的整数,第一个数是集装箱的尺寸,第二个数是该尺寸的集装箱的总数,集装箱的最大数目是 5×1035\times 10^3,集装箱的尺寸不超过 1010

输出格式

输出只有一行:

  1. NIE——表示仓库中的盒子不能装满意集装箱;
  2. 一个整数――与 11 中相反的情况,则输出装入集装箱中货物的最小价值。
5 
1 31 2
3 5
2 1
1 4
2
1 1
2 1
3

数据规模与约定

对于 100%100\% 的数据,1n1041\le n\le 10^4