南邮 OJ 1616 lithium的包裹

lithium的包裹

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 39            测试通过 : 15 

比赛描述

新的学期就要开始了,lithium同学也准备收拾行李从家里出发,但是他在将东西打包的时候遇到了一个问题。lithium一共有6种大小不同的行李,这些行李的高度相同且从上往下看都是正方形的,它们的大小分别为1*1,2*2,3*3,4*4,5*5,6*6

lithium现在有足够多的6*6大小的盒子(高度与行李相同),他想写一个程序算出最少要用几个盒子才能装下所有的东西。但是lithium同学因为打了一个假期的游戏,现在已经完全不会编程了,所以现在他只好求助于你来解决这个问题。




输入

输入将包含多组数据,每组数据占一行。一组数据中有六个数,分别代表大小从1*16*6的行李的数量。输入结束的标志是一组六个数全为“0”的数据。


输出

针对每一组输入数据输出lithium所需要的最少盒子数,对于最后一组“全零”样例不要输出结果。

 


样例输入

0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0

样例输出

2

题目来源

NUPT





#include<iostream>
using namespace std;

int main(){
	int n1,n2,n3,n4,n5,n6,box;
	int space1,space2;
	while(cin>>n1>>n2>>n3>>n4>>n5>>n6 && 
		(n1||n2||n3||n4||n5||n6) ){
		box = n6;
		space1 = space2 = 0;
		while(n5){
			n5--;
			box++;
			space1 += 11;
		}
		while(n4){
			n4--;
			box++;
			space2 += 5;
		}
		while(n3>=4){
			n3 -= 4;
			box++;
		}
		if(n3==3){
			box++;
			space2 += 1;
			space1 += 5;
			n3 = 0;
		}else if(n3==2){
			box++;
			space2 += 3;
			space1 += 6;
			n3 = 0;
		}else if(n3==1){
			box++;
			space2 += 5;
			space1 += 7;
			n3 = 0;
		}
		if(n2 <= space2){
			space2 -= n2;
			n1 += space2*4;
			n2 = 0;
		}else{
			n2 -= space2;
			space2 = 0;
			while(n2>=9){
				box += 1;
				n2 -= 9;
			}
			if(n2>0){
				box += 1;
				space1 += 36 -n2*4;
				n2 = 0;
			}
		}
		if(n1<=space1){
			space1 -= n1;
			n1 = 0;
		}else{
			n1 -= space1;
			space1 = 0;
			while(n1>=36){
				n1 -= 36;
				box ++;
			}
			if(n1){
				box++;
				n1 = 0;
			}
		}
		cout<<box<<endl;
	}
}



你可能感兴趣的:(ACM,南邮OJ,lithium的包裹)