思路
1. 问题分析与转化
对于每个盒子 j,我们需要找到满足条件的非空子集 S 的数量。盒子的尺寸为 (Xj,Yj,Zj)。我们令 Wj=min(Xj,Yj) 和 Hj=Zj。
条件可以重写为:
- maxi∈Sai≤Wj
- ∑i∈Sai≤Hj
题目内容
工厂生产了 n 种标准规格的正方形垫片,第 i 种垫片的边长(同时也是厚度)记为 ai。序列 a 定义如下:a1=1,a2=2,且对于 i>2 有 ai=ai−1+ai−2。
现有 m 个包装盒,第 j 个盒子的底面为矩形,宽度为 Xj,长度为 Yj,高度为 Zj。
一个非空垫片子集 S⊆{1,2,…,n} 能够放入第 j 个盒子,当且仅当它同时满足以下两个条件:
- 子集中最大垫片边长不超过盒子底面的短边:maxi∈Sai≤min(Xj,Yj);
- 子集中所有垫片的总厚度(边长之和)不超过盒子的高度:∑i∈Sai≤Zj。
对于每个盒子,请计算可以放入该盒子的非空垫片子集的数目。
数据范围:垫片种类数 n 满足 2≤n≤25,盒子数量 m 满足 1≤m≤2imes105。所有盒子的宽、长、高均为整数且不超过 104。一个测试文件中所有 m 的总和不超过 2imes105。