UVA311

来源:互联网 发布:西门子钻孔编程实例 编辑:程序博客网 时间:2024/04/28 00:05

这题是看别人的思路的。。。。

备注:

题目大意:
有1*1,2*2,3*3,4*4,5*5,6*6大小的盒子,要把它们装到6*6的盒子里,它们的高度都是相同的。求用最少的6*6盒子把所有尺寸的盒子都装起来。

分析与总结:
这一题是我在Volume 4. Algorithm Design这个专题中最后才做的一题,主要是因为没有思路。最好还是参考了别人的思路。

6*6的盒子中可以由各种尺寸的盒子来填满。可以有以下这些情况:
1个6*6
1个5*5+11个1*1
1个4*4+5个2*2(有空隙时优先放置2*2,如果没放完2*2的,剩下的就放置1*1)
放置3*3时,组合情况比较复杂。 没有放完3*3时,剩下的空隙也是优先尽可能多地放置2*2
当放置1个3*3时,还可以放置7个1*1和5个2*2
当放置2个3*3时,还可以放置6个1*1和3个2*2
当放置3个3*3时,还可以放置5个1*1和1个2*2

因为一个4*4,5*5,6*6只能放置在一个盒子里,所以有多少个这些,就需要多少个盒子来装。
然后因为3*3的可以和1*1和2*2的组合放置,所以也可以确定装完3*3需要的盒子。

那么在计算时,首先就可以确定放完3*3,4*4,5*5,6*6的盒子个数,假设是t个盒子。
然后这t个盒子中会有空隙,再优先把2*2的放置到t个盒子中的空隙中。如果这些空隙不能放完2*2的,那么就需要再增加盒子知道放完为止。最后在考虑放置1*1。


#include <iostream>#include <cstdio>using namespace std;int a[7];int three[4][2] = {{0, 0}, {7, 5}, {6, 3}, {5, 1}};int main() {    while (scanf("%d %d %d %d %d %d", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6]) != EOF) {        if (!a[1] && !a[2] && !a[3] && !a[4] && !a[5] && !a[6])             break;         int num = (a[3] + 3) / 4 + a[4] + a[5] + a[6];        a[1] -= a[5] * 11;         int left_2 = three[a[3] % 4][1] + a[4] * 5;        if (left_2 >= a[2]) {            a[1] -= three[a[3] % 4][0];             a[2] -= left_2;            a[1] += a[2] * 4;             if (a[1] > 0)                num += (a[1] + 35) / 36;         }        else {            a[1] -= three[a[3] % 4][0];            a[2] -= left_2;             num += (a[2] + 8) / 9;             a[1] -= (9 - a[2] % 9) * 4;            if (a[1] > 0)                 num += (a[1] + 35) / 36;         }         printf("%d\n", num);    }     return 0;}




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 别克车钥匙丢了怎么办 霜子哀伤断了怎么办 侧车窗外有雨水怎么办 昂科威15t变速箱异响怎么办 别克昂科拉一公里9毛怎么办? 雷诺科雷傲车钥匙丢了怎么办 奥迪a6l烧机油了怎么办 卡地亚手镯刮花怎么办 卡地亚戒指花了怎么办 手表摔了不走了怎么办 ck手表表扣很难打开怎么办 小天才泡了水怎么办 小天才手表掉水里了怎么办 小天才电话手表进水了怎么办 小天才手表进水了怎么办 小天才电话手表丢了怎么办 小天才电话手表黑屏怎么办 安全守护注册码忘记了怎么办 儿童安全锁的门打不开怎么办 守护宝老年机打不开了怎么办 小米电话手表坏了怎么办 小米手表带坏了怎么办 小米电话手表屏幕坏了怎么办 雷诺梅甘娜06款系统错乱怎么办 轿车碰了一个坑怎么办 车子卖了没过户怎么办 9岁儿童肠胃痉挛怎么办 鹿角胶水放多了怎么办 打胰岛素血糖还是高怎么办 血糖高打胰岛素降不下去怎么办 儿童低烧37度1怎么办 小孩发烧一会冷一会热怎么办 月子里得的风湿怎么办 腰窝中间凸起肉怎么办 线雕后一个月脸发红肿胀怎么办 雷诺氏病手指僵硬疼怎么办 哺乳妈妈吃咸了怎么办 吃流产药哺乳了怎么办 坐月子吃咸了怎么办啊 拔罐放血后头晕怎么办 e道航界面不动怎么办