一维装箱
商品规格为长为n,高为1,可以平放。有一个一位数组,每个值大于0表示高出地面,小于0表示低于地面,等于0表示地平面(可以理解为坑坑洼洼高高低低)
输入第一行:n,表示货品长度;第二行:m,表示数组长度;第三行:依次数组的值
例如:
如果装的商品长为2:
那么只能装两个 ,最终结果就是输出能装下的商品数量。
解析:
如上图例子中所示,我们首先要找坑,找到坑以后还要看一下坑大小能不能塞下商品(坑宽度),然后看下能塞几个(坑深度),这个因素可以使我们避免陷入如下紫色的深坑中去寻找(商品宽度为2,没有意义的寻找,因为坑宽度本身就不合适了)
输入
2
4
0,-1,-2,0
输出:
1
输入
3
8
0,-1,-2,2,1,1,1,2
输出:
0
这里还有一个优化是,如果深度一样,一下可以下降多层
1 n = int(input()) 2 m = int(input()) 3 arr = list(map(int, input().split(','))) 4 arr.append(0) #最后一位存能装下的货品数量 5 def find(i,j,h): 6 while i<=j: 7 if arr[i]<h: 8 for k in range(i, j+1): # j+1 9 if arr[k]>=h: 10 t = h - max(arr[i], arr[k-1]) #下降的高度差 11 temp = ((k-i)//n)*t 12 if temp>0: 13 find(i, k, h-t) #下降(h-t)米 14 arr[-1] += temp 15 i = k 16 break 17 else: 18 i += 1 19 find(0,m,0) 20 print(arr[-1])