你来到玩具国旅游,想要给同学们带一些礼物。 玩具国出售的物品分为玩具和箱子两种。每个玩具具有自己的体积 v[i] ,每个箱子具有自己的容积 c[j] 。 第 i 个玩具可以装进第 j 个箱子,当且仅当v[i]<=c[j] 。同时,一个箱子只能装最多一件玩具,显然,一件玩具也最多只能被一个箱子装。 我们将一个用箱子装起来的玩具称为一份礼物。 按时间顺序,你一共购买了N件物品,它们有些是玩具,有些是箱子。 每次买下一件物品(箱子或玩具)后,你都想知道:对于目前你拥有的所有玩具和箱子,最多能组成多少份礼物。 输入格式 输入格式: 第一行包含一个正整数 表示你购买的物品数。 接下来N行,每行包含两个整数 a[i],b[i],保证 a[i]为0或1 。 a[i]=0,表示第 i个物品是一个箱子,它的容积 c[i]=b[i] 。 a[i]=1,表示第 i个物品是一个玩具,它的体积 v[i]=b[i] 。 输出格式 输出格式: 输出 行,第 行表示购买第 个物品后,最多能组成多少份礼物。 样例 样例输入: 6 1 1 1 5 0 6 0 4 1 3 0 2 样例输出: 0 0 1 2 2 3
时间: 2024-04-10 17:34:42 浏览: 74
首先,我们需要一个变量来记录当前拥有的箱子和玩具的数量,以及一个变量来记录能组成的礼物的数量。然后,我们按照输入的顺序逐个购买物品,并更新这些变量。
具体的算法如下:
1. 读取购买的物品数N。
2. 初始化箱子数量和玩具数量为0,礼物数量为0。
3. 循环N次,对于每个物品:
- 读取物品类型a和体积/容积b。
- 如果物品是箱子(a=0):
- 如果当前拥有的玩具数量大于0,将一个玩具放入箱子,礼物数量加1,玩具数量减1。
- 如果物品是玩具(a=1):
- 对于每个箱子,如果当前箱子的容积大于等于玩具的体积,将玩具放入箱子,礼物数量加1,箱子数量减1,跳出循环。
- 如果没有箱子能容纳这个玩具,将玩具数量加1。
- 输出当前礼物数量。
以下是实现上述算法的Python代码:
```python
N = int(input())
toys = 0
boxes = 0
gifts = 0
for _ in range(N):
a, b = map(int, input().split())
if a == 0: # 箱子
if toys > 0:
gifts += 1
toys -= 1
else: # 玩具
for _ in range(boxes):
if b <= 0:
break
gifts += 1
boxes -= 1
b -= 1
toys += 1
print(gifts)
```
希望对你有所帮助!
阅读全文