题目描述
某校开展爱心捐书活动,同学们纷纷踊跃把自己看过的旧书拿出来捐给贫困山区的孩子们,图书室的胥林老师把同学们捐献的书打包在了6种纸箱子里(打包好的各类纸箱子有若干个),纸箱子的高相同,但底面积分为1 * 1,2 * 2,3 * 3,4 * 4,5 * 5,6 * 6。现为了装车方便,需要把这些纸箱子装在若干个6*6的木箱子,木箱子的高和打包纸箱子相同,请你帮助胥老师,用最少的木箱子打包完所有的纸箱子。
输入格式
一行(六个数)用空格隔开
分别表示1 * 1、2 * 2、3 * 3、4 * 4、5 * 5、6 * 6六类纸箱子的个数(每类箱子的个数小于等于100)
输出格式
一行,最少的木箱子个数
样例
样例输入
6 5 4 3 2 1
样例输出
7
思路
按照从大到小的顺序放入盒子
代码
#include <cstdio>
int s1, s2, s3, s4,s5,s6;
long long sum;
int a[10] = {0, 5, 3, 1};
int main() {
scanf("%d %d %d %d %d %d", &s1, &s2, &s3, &s4, &s5, &s6);
sum += s6 + s5 + s4 + (s3 + 3) / 4;
int r2, r1;
r2 = s4 * 5 + a[s3 % 4];
if(s2 > r2){
sum += ((s2 - r2) + 8) / 9;
}
r1 = sum * 36 - s6 * 6 * 6 - s5 * 5 * 5 - s4 * 4 * 4 - s3 * 3 * 3 - s2 * 2 * 2;
if(s1 > r1){
sum += (s1 - r1 + 35) / 36;
}
printf("%lld", sum);
return 0;
}