uva311 - Packets
来源:互联网 发布:淘宝时尚潘多拉真假 编辑:程序博客网 时间:2024/04/28 10:06
题意:
给你一个一组一定数目大小为1*1,2*2,3*3,4*4,5*5,6*6的小方块,让你装进一个6*6的方块里,求最少需要多少个6*6方块数
思路:
参考了别人的做法。
贪心 ,若有多余则先装2*2的,后装1*1的,因为装了2*2若有多余仍可拆分成1*1
6*6可装 -> 一个6*6
-> 一个5*5+11个1*1
->一个4*4+5个2*2
规格为3的分开讨论(一个6*6方块里装4,3,2,1,个3*3)
将大小为6,5,4,3的都讨论后再最后算2和1
代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int a[6];int main() { while (scanf("%d%d%d%d%d%d", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6])) { if (!a[1] && !a[2] && !a[3] && !a[4] && !a[5] && !a[6]) break; int cnt = 0; cnt += a[5]; cnt += a[6]; a[1] -= a[5] * 11; cnt += a[4]; a[2] -= a[4] * 5; //3*3的情况: cnt+=a[3]/4; //a[3]<4 if (a[3]%4 == 1) { cnt++; a[2] -= 5; a[1] -= 7; } else if (a[3]%4 == 2) { cnt++; a[2] -= 3; a[1] -= 6; } else if(a[3]%4==3){ cnt++; a[2] -= 1; a[1] -= 5; } if (a[2] < 0) { a[1]+=4*a[2]; a[2] =0; } if (a[1] < 0) a[1] = 0; cnt += (a[1] + 4 * a[2]) / 36; if ((a[1] + 4 * a[2]) % 36 != 0) cnt++; printf("%d\n", cnt); }}
0 0
- uva311 - Packets
- uva311 - Packets
- [贪心]uva311 Packets
- uva311 - Packets(贪心)
- UVA311
- uva311
- packets
- Packets
- Packets
- Packets
- Packets
- Packets
- Packets
- Packets
- uVA311包裹包含
- PKUOJ1017 Packets
- 1017 Packets
- poj1017 packets
- shell语法以及监控进程不存在重启
- PAT 1006
- close_on_exec标志位的作用
- poj1002---手算乘法
- 反射(Reflection)基础
- uva311 - Packets
- 自定义竖直方向的ViewPager
- python类
- 面试(必知必会)-sizeof()+strlen()函数浅析
- 什么时候用 Java 自旋锁?
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- 简单工厂模式
- Junit4框架简介
- 网页的结构