地址:POJ1017
大意是只有6*6规格的箱子来装(虽然是描述三维的,但因为高度相同,因此忽略掉),给你若干个从1*1到6*6规格的箱子,求所需最小箱子数。
思路:很明显应该利用贪心,即优先从最大规格的箱子数来考虑,然后因为在装完较大规格的箱子后,该箱子可以存在剩余空间,所以仍应该利用,且仍旧优先装较小规格中较大的箱子。6规格的箱子只能装一个且空间全占满,无剩余;5规格的箱子装一个,且还可以装11个1*1规格的箱子;4*4的装一个后可以最多装从5个2*2规格到20个1*1规格的箱子。
关于3*3规格箱子的处理,一个箱子可以装4到1个该规格箱子,但剩下的空间应该我们分情况讨论。在纸上画一下可得知当该箱子分别装4,3,2,1个3*3规格后,剩余空间最多可以装0,1,3,5个2*2规格的箱子。
剩下的2*2和1*1箱子就首先放进前面各较大规格箱子空间的剩余,不够的话再用新箱子。
代码如下:
#include<iostream>
using namespace std;
int main() {
int a, b, c, d, e, f, x, y;//x,y分别为给规格1,2的箱子剩余的空间
int sum;//所需的箱子数量
while (true) {
cin >> a >> b >> c >> d >> e >> f;
if (a + b +