【题解-信息学奥赛一本通】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;
}

结果

相关推荐
tkevinjd2 小时前
力扣300-最长递增子序列
算法·leetcode·职场和发展·动态规划·贪心
Tisfy1 个月前
LeetCode 3689.最大子数组总值 I:What The Medium
算法·leetcode·题解·贪心·模拟·脑筋急转弯
Misnearch1 个月前
3635. 最早完成陆地和水上游乐设施的时间II
leetcode·贪心·排序
不太会a2 个月前
Educational Codeforces Round 175 (Rated for Div. 2) C
贪心·二分
芜湖xin2 个月前
【题解-洛谷】P1012 [NOIP 1998 提高组] 拼数
算法·贪心
lulutoy2 个月前
1624: 安排电视节目(PIPIPOJ)
贪心
王老师青少年编程2 个月前
csp信奥赛C++高频考点专项训练之贪心算法 --【贪心与二分判定】:数列分段 Section II
c++·算法·贪心·csp·信奥赛·二分判定·数列分段 section ii
王老师青少年编程2 个月前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
王老师青少年编程2 个月前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:荷马史诗
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·荷马史诗