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

结果

相关推荐
Tisfy4 天前
LeetCode 3014.输入单词需要的最少按键次数 I:遍历 / if-else计算(比纯数学公式写起来麻烦但好想)
数学·算法·leetcode·字符串·题解·贪心
qz5zwangzihan113 天前
题解:Atcoder Beginner Contest abc467 F - Email Scheduling Optimization
c++·贪心·atcoder·平衡树·abc467·abc467_f·fhq-treap
cpp_250118 天前
P6625 [省选联考 2020 B 卷] 卡牌游戏
数据结构·c++·算法·前缀和·贪心·洛谷题解·省选
cpp_250120 天前
P10098 [ROIR 2023] 地铁建设 (Day 2)
数据结构·c++·算法·贪心·二分答案·洛谷题解
tkevinjd21 天前
力扣300-最长递增子序列
算法·leetcode·职场和发展·动态规划·贪心
Tisfy2 个月前
LeetCode 3689.最大子数组总值 I:What The Medium
算法·leetcode·题解·贪心·模拟·脑筋急转弯
Misnearch2 个月前
3635. 最早完成陆地和水上游乐设施的时间II
leetcode·贪心·排序
不太会a3 个月前
Educational Codeforces Round 175 (Rated for Div. 2) C
贪心·二分
芜湖xin3 个月前
【题解-洛谷】P1012 [NOIP 1998 提高组] 拼数
算法·贪心