【题解-信息学奥赛一本通】1226:装箱问题

题目:1226:装箱问题

题目描述

一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1×1, 2×2, 3×3, 4×4, 5×5, 6×6。这些产品通常使用一个6×6×h的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。

输入

输入包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空格隔开,分别为1×1至6×6这六种产品的数量。输入将以6个0组成的一行结尾。

输出

除了输入的最后一行6个0以外,输入文件里每一行对应着输出文件的一行,每一行输出一个整数代表对应的订单所需的最小包裹数。

时空限制

1s / 64MB

样例输入

复制代码
0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0

样例输出

复制代码
2
1

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=6+10;
int a[N],sum;
int main(){
	while(cin>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6],a[1]||a[2]||a[3]||a[4]||a[5]||a[6]){
		sum=a[6]+a[5]+a[4];
		if(a[5]) a[1]=max(0,a[1]-11*a[5]);
		if(a[2] && a[4]){
			int x=a[2]/5;
			int t=a[2];
			a[2]=a[2]-min(a[4]*5,x*5+a[2]%5);
			a[4]=a[4]*36-(a[4]*16+(t-a[2])*4);
		}
		if(a[1] && a[4]) a[1]=max(0,a[1]-a[4]);
		
		sum+=a[3]/4;
		a[3]%=4;
		if(a[3]){
			sum++;
			if(a[2]){
				switch(a[3]){
					case 1:a[2]-=5;a[3]=a[3]*9+5*4;break;
					case 2:a[2]-=3;a[3]=a[3]*9+3*4;break;
					case 3:a[2]-=1;a[3]=a[3]*9+1*4;break;
				}
			}
			a[2]=max(a[2],0);
			if(a[1]) a[1]=max(0,a[1]-(36-a[3]));
		} 
		sum+=a[2]/9;
		a[2]%=9;
		if(a[2]){
			sum++;
			if(a[1]) a[1]=max(0,a[1]-(36-a[2]*4));
		} 
		sum+=a[1]/36;
		a[1]%=36;
		if(a[1]) sum++;
		cout<<sum<<endl;
	}
	return 0;
}

结果

相关推荐
伟大的车尔尼2 天前
贪心题目:三角形的最大周长
贪心
青少儿编程课堂3 天前
贪心算法进阶:区间调度与最少资源整合解析
c++·python·算法·贪心·信息学竞赛·区间调度
伟大的车尔尼6 天前
贪心题目:保持城市天际线
贪心
a187927218317 天前
【算法】动态规划第三篇:背包第一课——贪心之死与正序倒序开关
算法·leetcode·动态规划·贪心·dp·暴力·算法讲解
lvwangshu9 天前
P7668 [JOI 2018 Final] 团子制作 / Dango Maker 题解
动态规划·题解·贪心·性质题·思维好题
伟大的车尔尼10 天前
贪心题目:玩筹码
贪心
伟大的车尔尼11 天前
贪心题目:数组大小减半
贪心
漂流瓶jz11 天前
UVA-1609 不公平竞赛 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·链表·贪心·aoapc·算法竞赛入门经典·uva
伟大的车尔尼14 天前
贪心的概念
数据结构·算法·贪心
吞下星星的少年·-·15 天前
The 2025 ICPC Asia East Continent Online Contest (I) A题(模拟+贪心)
算法·贪心·模拟