漆狗屋/书本分发(最大值最小问题)
Description
Dilpreet wants to paint his dog- Buzo’s home that has n boards with different lengths[A1, A2,…, An]. He hired k painters for this work and each painter takes 1 unit time to paint 1 unit of the board.
The problem is to find the minimum time to get this job done under the constraints that any painter will only paint continuous sections of boards, say board {2, 3, 4} or only board {1} or nothing but not board {2, 4, 5}.
Constraints:1<=T<=100,1<=k<=30,1<=n<=50,1<=A[i]<=500
Input
The first line consists of a single integer T, the number of test cases. For each test case, the first line contains an integer k denoting the number of painters and integer n denoting the number of boards. Next line contains n- space separated integers denoting the size of boards.
Output
For each test case, the output is an integer displaying the minimum time for painting that house.
Sample Input 1
2
2 4
10 10 10 10
2 4
10 20 30 40
Sample Output 1
20
60
思路分析
参考
此类问题为:最大值最小问题,一般使用二分查找
工人可以视为桶,工作时间可以视为桶容量,即题目为在特定桶数量下,找到最大桶容量的最小值。
# 漆狗屋
# 分析:要以最快时间漆好狗屋,就要把最长时间减少到最短。
# 求最大值最小问题,一般用二分查找解决
def get_request_tub(cap, arr, p, b): # 查找给定桶容量时所需的桶数量
numTub = 1
sum = 0
for i in range(b):
sum += arr[i]
if sum > cap:
numTub +=