问题描述:如果你有n块板,和K个油漆工人,求最短时间刷完所有板
前提:
一块板只能有一个工人刷
工人必须连号刷,不能跳跃板刷,比如5块板,可以1,2,3 刷,也可以3,4,5 刷,但是不能1,2,4刷
列如:
我有4块板,每块长1米,我有一个工人,每小时刷1米,那么最短时间刷完要4个小时(连着1,2,3,4);
我有4块板,每块长1米,我有二个工人,每人每小时刷1米,那么最短时间刷完要2个小时(工人甲刷1,2;工人乙刷3,4);
我有4块板,每块长1米,我有三个工人,每人每小时刷1米,那么最短时间刷完要2个小时(工人甲刷1;工人乙刷3;工人丙刷3,4;很明显,因为不能两人同时刷一块板也不能跳着刷,所以还是得花2个小时);
我有4块板,长度分别为1,2,3,4米,我有一个工人,每小时刷1米,那么最短时间刷完要10个小时(连着1,2,3,4);
我有4块板,长度分别为1,2,3,4米,我有二个工人,每人每小时刷1米,那么最短时间刷完要6个小时(工人甲刷1,2,3;工人乙刷4;瓶颈在工人甲这里,换来换去没有用,不能跳着刷也不能一起刷);
我有4块板,长度分别为1,2,3,4米,我有三个工人,每人每小时刷1米,那么最短时间刷完要4个小时(工人甲刷1,2;工人乙刷3;工人丙刷 4; 瓶颈在工人丙这里);
以此类推,假如我有n块板和k个工人,求最短时间刷完。
Python 3 实现:
print ("How Many Boards You Have and Their Sizes: ")
arr=[int(x) for x in input().split(',')]
print ("How Many Painters You Have: ")
k=int(input())
sort_arr=sorted(arr)
sum_arr=sum(arr)
n=len(arr)
def partition(arr,n,k):
lo=int(sort_arr[-1])
hi=int(sum_arr)
while (lomaxLen:
total =arr[i]
numPainter+=1
return numPainter
print ("Minimum Time: ",partition(arr,n,k))
原文链接:https://www.geeksforgeeks.org/painters-partition-problem-set-2/
原文只有C++和JAVA 实现,改成python更简洁