POJ 1017: Packets
来源:互联网 发布:matlab怎么编程 编辑:程序博客网 时间:2024/05/16 19:03
解题要点: 想出最优化的装箱方法.
装箱次序如下:
- 装 6x6 的: 一箱 1 个, 无盈余.
- 装 5x5 的: 一箱 1 个, 剩余空间可以装 1x1 的.
- 装 4x4 的: 一箱 1 个, 剩余空间可装 5 个 2x2 的, 若装不满, 还可以继续装 1x1 的.
- 装 3x3 的: 一箱最多 4 个, 若装不满, 则:
- 装了 1 个 3x3 的: 还可以装 5 个 2x2 的, 剩余空间可以装 1x1 的.
- 装了 2 个 3x3 的: 还可以装 3 个 2x2 的, 剩余空间可以装 1x1 的.
- 装了 3 个 3x3 的: 还可以装 1 个 2x2 的, 剩余空间可以装 1x1 的.
- 装 2x2 的: 先填满之前的空余空间. 若还有剩余, 则一箱最多装 9 个. 若装不满, 还可以继续装 1x1 的.
- 装 1x1 的: 先填满之前的空余空间. 若还有剩余, 则一箱最多装 36 个.
总结一下, 确定所需箱子数目的过程可大致分为两步:
- 根据 6x6, 5x5, 4x4, 3x3 的数目, 确定箱子的大致数目.
- 依次用 2x2 及 1x1 进行填充, 若空间不足则继续加箱.
代码如下:
#include <iostream>using namespace std;int main() { int a, b, c, d, e, f; int twoInThree[] = {0, 5, 3, 1}; while( cin >> a >> b >> c >> d >> e >> f && ( a != 0 || b != 0 || c != 0 || d != 0 || e != 0 || f != 0 ) ) { int n = f + e + d + ( c + 3 ) / 4; int tmp = d * 5 + twoInThree[c % 4]; if( b > tmp ) { n += ( b - tmp + 8 ) / 9; } tmp = ( n - f ) * 36 - e * 25 - d * 16 - c * 9 - b * 4; if( a > tmp ) { n += ( a - tmp + 35 ) / 36; } cout << n << endl; }}
0 0
- poj 1017 Packets【贪心】
- POJ 1017 Packets(贪心)
- poj 1017 Packets
- POJ 1017 Packets
- POJ 1017 Packets
- poj 1017 Packets(贪心)
- poj 1017 Packets
- poj 1017 Packets
- POJ 1017 Packets
- POJ 1017 Packets
- POJ 1017 Packets
- poj 1017 Packets
- POJ-1017-Packets
- poj 1017 Packets ( 贪心 )
- POJ 1017Packets(贪心)
- POJ 1017 Packets
- poj 1017 Packets
- [POJ][1017]Packets
- iOS开发之简单多语言开发
- C语言编程:进制转换器
- 模2除法
- 可控的花样流水灯
- ASCII 码的显示
- POJ 1017: Packets
- 《甩蛋歌》唱尽2011
- 用80x86汇编语言编程--统计输入的字符个数
- 用80x86汇编语言编程--过滤数字符号,并且大小写转换
- 顺序输出片内RAM的数据
- 《血色浪漫》中秦岭的陕北民歌
- host命令
- 24.Examine the structure proposed for the TRANSACTIONS table:
- [问题记录] openssl error:0906D064:PEM routines:PEM_read_bio:bad base64 decode