poj之旅——1017

题目描述:有 1 * 1 到 6 * 6 的产品,最少用几个 6 * 6 的箱子装它们。

题解:贪心策略是先装大的,再装小的,6 * 6 和 5 * 5 以及 4 * 4 肯定独享一个箱子(不可能再放得下同规格的产品)。装了 4 * 4 和 3 * 3 的箱子还可以放 2 * 2 的产品,给几张图,可以看得更清晰:poj之旅——1017_第1张图片


参考程序:

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;
int main(){
	int p1,p2,p3,p4,p5,p6;
	int spa[4]={0,5,3,1};
	while ((scanf("%d%d%d%d%d%d",&p1,&p2,&p3,&p4,&p5,&p6)==6) && (p1 || p2 || p3 || p4 || p5 || p6)){
		int ans=p4+p5+p6+(p3+3)/4,free=5*p4+spa[p3 % 4];
		if (p2>free) ans+=(p2-free+8)/9;
		free=36*ans-36*p6-25*p5-16*p4-9*p3-4*p2;
	    if (p1>free) ans+=(p1-free+35)/36;
		printf("%d\n",ans);	
	}
	return 0;
}

//图片转自hankcs的博客

你可能感兴趣的:(poj之旅——1017)