poj1017(Packets)

Description

A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These products are always delivered to customers in the square parcels of the same height h as the products have and of the size 6*6. Because of the expenses it is the interest of the factory as well as of the customer to minimize the number of parcels necessary to deliver the ordered products from the factory to the customer. A good program solving the problem of finding the minimal number of parcels necessary to deliver the given products according to an order would save a lot of money. You are asked to make such a program.

Input

The input file consists of several lines specifying orders. Each line specifies one order. Orders are described by six integers separated by one space representing successively the number of packets of individual size from the smallest size 1*1 to the biggest size 6*6. The end of the input file is indicated by the line containing six zeros.

Output

The output file contains one line for each line in the input file. This line contains the minimal number of parcels into which the order from the corresponding line of the input file can be packed. There is no line in the output file corresponding to the last ``null'' line of the input file.

Sample Input

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

Sample Output

2 
1 

装箱问题,不难写,就是写起来很麻烦,看了大牛的博客后才把代码减短到这么少的。。。详细题解见注释

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <map>
#include <vector>
#include <list>
#include <set>
#include <stack>
#include <queue>
#include <deque>
#include <algorithm>
#include <functional>
#include <iomanip>
#include <limits>
#include <new>
#include <utility>
#include <iterator>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <ctime>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1.0);
const double EPS = 1e-8;
const int MAXN = 50010;
int dx[] = {0, 1, 0, -1}, dy[] = {-1, 0, 1, 0};

int main()
{
    int a, b, c, d, e, f, u[] = {0, 5, 3, 1};//u表示3*3盒子分别为4倍数+0、+1、+2、+3时多出的2*2个数
    while (1)
    {
        scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f);
        if (!a && !b && !c && !d && !e && !f)
            break;
        int ans = d + e + f + (c + 3) / 4;//装3*3、4*4、5*5、6*6需要箱子数
        int y = 5 * d + u[c%4];//装完3*3、4*4多出的2*2个数
        ans += (max(b-y, 0) + 8) / 9;//多出的2*2盒子需要的箱子数
        int x = 36 * ans - 36 * f - 25 * e - 16 * d - 9 * c - 4 * b;//多出的1*1个数
        ans += (max(a-x, 0) + 35) / 36;//多出的1*1盒子需要的箱子数
        cout << ans << endl;
    }
    return 0;
}


算法码上来 文章被收录于专栏

公众号「算法码上来」。godweiyang带你学习算法,不管是编程算法,还是深度学习、自然语言处理算法都一网打尽,更有各种计算机新鲜知识和你分享。别急,算法码上来。

全部评论

相关推荐

过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
09-14 14:42
门头沟学院 C++
旺旺米雪饼:举办了哥,你什么都没做错,全怪我那令人作呕的嫉妒和卑微的自尊心,看见你的文字我完全破防了,我直接丢盔弃甲了,看见你这图的那一秒,我满头大汗,浑身发冷,亿郁症瞬间发作了,生活仿佛没了颜色,像是被抓住尾巴的赛亚人,带着海楼石的能力者,抽离尾兽的人柱力,像是没了光的奥特曼,彻底断绝了生的希望。我几乎都快羡慕得疯了,倒在床上蒙住被子就开始抱着枕头尖叫流泪,嘴里一边喊着卧槽卧槽,一边又忍着,我边发边哭,打字的手都是抖的,后来我的手抖得越来越厉害,从心头涌起的思想、情怀和梦想,这份歆羡和悔恨交织在一起,我的笑还挂在脸上,可是眼泪一下子就掉下来了。求你了别发了,我生活再难再穷我都不会觉得难过,只有你们发这种东西的时候,我的心里像被刀割一样的痛,打着字泪水就忍不住的往下流。每天早上6点起床晚上11点睡觉,年复一年地学到现在,憧憬着一个月赚上万块的幸福生活,憧憬着美好阳光的未来。我打开了手机,看到你的图,我感到了深深的差距,我直接跳进了家门口的井里😭😭😭我真的😭我要嫉妒疯了😭为什么!!为什么这个人不是我😡我求你了😭求你了😭!不要在发了,我真的要羡慕嫉妒疯了😱怎么办我要嫉妒死了啊啊啊啊我急了,手机电脑全砸了,本来就有抑郁症的我,被别人说我破防了,我真的恼羞成怒了,仿佛被看穿了,躲在网络背后的我,这种感觉真的好难受,我被看穿的死死地,短短的破防两个字,我伪装出来的所有的坚强和强颜欢笑全都崩塌了,成了一个被人笑话的小丑🤡,我真的不想再故作坚强了,玩心态我输的什么都不剩😭😭😭
点赞 评论 收藏
分享
11-07 11:46
已编辑
南京理工大学 C++
都没出结果,问问是各位会如何选择补充一下,华为应该是14左右县是南通市下面的一个县局
在敲键盘的布莱克很积极:兄弟,我给你提供一个角度,其他评论可能更多是从待遇和发展前景来看的,但是我建议你想一想你走哪条路更能产生对自己的身份认同。 如果你乐于钻研技术,喜欢工程实践,即使从华为失业你也能认可自己工程师的身份,不因为工作上不顺而失去对自己的尊重(因为这是你几乎必然会面对的情况),那就可以去华为,毕竟广阔天地大有可为。 但是如果你并不能因为技术产生自我的身份认同,那建议还是公务员吧,因为这种职业自带身份认同,不需要你有很强的兴趣与心理建设来支持,即使每月钱不多,你比较容易做到自己尊重自己,也容易在社会上得到他人的尊重。 不管钱多钱少,待遇怎么样,最终还是要自己过得开心,享受到了生活,才算是好的一生
投递华为等公司10个岗位 >
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务