牛客网:货物装箱问题
题目描述python
有重量分别为3,5,7公斤的三种货物,和一个载重量为X公斤的箱子(不考虑体积等其它因素,只计算重量) 须要向箱子内装满 n 公斤的货物,要求使用的货物个数尽量少(三种货物数量无限)web
示例1算法
输入 4 输出 -1 说明:没法装满数组
示例2
输入 8 输出 2 说明:使用1个5公斤,1个3公斤货物svg
先上代码,直接计算给定的n便可。因为测试样例不少,这道题目考的是数学思惟,而不是什么遍历,动态规划之类的算法。若是用python的话,建议优先来考虑其数学规律,否则很容易超时。测试
n = int(input().strip()) num = (-1, -1, 1, -1, 1, 2, 1, 2, 3, 2, 3, 2, 3) if n < 14: print(num[n-1]) else: count = n//7-1 print(count+num[6+n%7])
思路:
前7个很特殊,当n是1,2时,不知足要求,只能输出-1;n是4也不知足要求,输出-1,当n是3,5,7时,输出1就能够。n是6时,两个3就能够知足载货要求。此时前7个已经讨论完毕。
接着咱们看超出单个最大载货量 7 时,有什么规律code
重量 | 8 | 9 | 10 | 11 | 12 | 13 |
---|---|---|---|---|---|---|
最少箱子策略 | 3,5 | 3,3,3 | 3,7 | 3,3,5 | 5,7 | 3,3,7 |
箱子个数 | 2 | 3 | 2 | 3 | 2 | 3 |
这里为何不列举13日后的呢?由于咱们的策略是优先考虑 7 公斤的货物,那么 8 到 13 的例子正好对应了与 7 取余的 6 种状况。好比若是给定 n 是 36,那么能够用 36//7=5 个7公斤的货物,此时余数是1,对应了8的这种状况,那咱们此时去掉一个 7 公斤重的货物,填补上一个 3 公斤和一个 5 公斤重的货物,那么最终的箱子数目就是 5 - 1 + 2 = 6.xml
注意:看完上表,咱们发现只要给定的 n 大于7,那么必定不会输出-1.ip
所以算法步骤:get
记得验证一些特殊边值条件,防止小错误,好比14。